Python入门学习笔记————12(继承,构造函数)
2018-12-28 15:10
435 查看
受保护的封装 protected
- 受保护的封装是将对象成员进行一定级别的封装,然后在类中或者子类中都可以访问,但外部不可以
- 封装方法: 在成员名称前添加一个下划线即可
公开的,公共的 public
- 公共的封装实际对成员没有任何操作,任何地方都可以访问
继承
- 继承是一个类可以获得另外一个类中的成员属性和成员方法
- 作用 : 减少代码,增加代码的复用功能,同时可以设置类与类的直接的关系
- 继承与被继承的概念: 被继承的类,叫做父类,也叫作基类,也叫超类
- 用于继承的类,叫做子类,也叫派生类
- 继承与被继承一定存在一个 is——a 关系
- 所有的类都继承自object类,即所有类都是object的子类
- 优先查找自己的变量
In [1]:
# 继承语法
#在Python中,任何一个类都有一个共同的类叫object
class Person():
name = 'Noname'
age = 12
def sleep(self):
print('sleeping...')
#父类写在括号里
class Teacher (Person):
#子类中的独有成员函数
def make_test(self):
pass
t = Teacher()
print(t.name)
print(Teacher.name)
Noname Noname
In [7]:
class Person():
name = 'Noname'
age = 12
__score = 100 #成绩属于私有成员,只能自己访问
_petname = 'goudan' #小名属于受保护的,不能外部访问
def sleep(self):
print('sleeping...')
#父类写在括号里
class Teacher (Person):
#子类中的独有成员函数
def make_test(self):
pass
t = Teacher()
print(t.name)
print(t._petname)
t.sleep()
print(t.__score) #私有无法访问报错
Noname goudan sleeping...
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-7-f6a778bb0e74> in <module>() 16 print(t._petname) 17 t.sleep() ---> 18 print(t.__score) #私有无法访问报错 19 AttributeError: 'Teacher' object has no attribute '__score'
In [11]:
#子类可以有自己的属性与方法
class Person():
name = 'Noname'
age = 12
def sleep(self):
print('sleeping...')
#父类写在括号里
class Teacher (Person):
#子类中的独有成员函数
teacher_id = 343
def make_test(self):
print('attention')
t = Teacher()
print(t.name)
print(t.teacher_id)
t.make_test() #调用成员函数方法
Noname 343 attention
In [14]:
#子类与父类中变量名称相同
class Person():
name = 'Noname'
age = 12
def sleep(self):
print('sleeping...')
#父类写在括号里
class Teacher (Person):
#子类中的独有成员函数
name = 'goudan' #名称相同
def make_test(self):
pass
t = Teacher()
print(t.name)
print(Person.name)
goudan Noname
In [24]:
#子类扩充父类功能
class Person():
name = 'Noname'
age = 12
def sleep(self):
print('sleeping...')
def work(self):
print('make some money')
#父类写在括号里
class Teacher(Person):
#子类中的独有成员函数
def make_test(self):
print('attention')
def work(self):
#扩充父类功能只需要调用父类相应函数
Person.work(self) # 还可以使用 super().work() 来得到目的,super() 即代表父类
self.make_test()
t = Teacher()
t.work()
make some money attention
构造函数
- 是一类特殊的函数,在类实例化之前进行调用
- 如果定义了构造函数,则实例化时使用构造函数,不查找父类
- 如果子类不带,父类带,则构造对象时的参数应该按父类参数构造
In [25]:
# 构造函数的概念
class Dog():
#__init__就是构造函数,格式固定
#每次实例化时第一个被自动调用
#主要工作是进行初始化
def __init__(self):#必须有参数
print('I am init in dog')
#实例化时,括号内的参数需要跟构造函数参数匹配
kaka = Dog()
I am init in dog
In [26]:
#继承中的构造函数 - 1
class Anim():
pass
class PaxingAnim(Anim):
pass
class Dog(PaxingAnim):
def __init__(self):
print('I am init in dog')
#实例化的时候,自动调用了Dog的构造函数
kaka = Dog()
I am init in dog
In [31]:
#继承中的构造函数 - 2
class Anim():
def __init__(self):
print('dongwu')
class PaxingAnim(Anim):
def __init__(self):
print('wo kao pa')
class Dog(PaxingAnim):
def __init__(self):
print('I am init in dog')
#注意,在自身找到了构造函数,所以不在父类查找
kaka = Dog ()
#没有定义构造函数,则去父类中进行查找,找到即停止
class Cat(PaxingAnim):
pass
haha = Cat()
I am init in dogwo kao pa
In [38]:
#继承中的构造函数 - 3
class Anim():
def __init__(self):
print('dongwu')
class PaxingAnim(Anim):
def __init__(self,name):#注意参数需要匹配
print('wo kao pa {0}'.format(name))
class Dog(PaxingAnim):
def __init__(self):
print('I am init in dog')
#本身有构造函数企且匹配
d = Dog()
class Cat(PaxingAnim):
pass
#参数匹配
name = 'gogo'
haha = Cat(name)
#参数不匹配,报错
haha = Cat()
I am init in dogwo kao pa gogo
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-38-017e2b6ebfdb> in <module>() 19 haha = Cat(name) 20 #参数不匹配,报错 ---> 21 haha = Cat() TypeError: __init__() missing 1 required positional argument: 'name'
super
- super不是关键字,而是一个类
- super的作用是获取MRO列表中的第一个类
- super与父类没有直接任何实质性3关系,但是通过super可以调用到父类
相关文章推荐
- python学习笔记——旧类与新类继承中的构造函数
- Python入门学习笔记————13(继承,多态,类相关函数)
- 【Python】Python学习笔记(类的继承)
- Python学习笔记 01 快速入门
- Python入门学习笔记之Python模块
- 【菜鸟C++学习笔记】12.构造函数与析构函数
- python基础教程_学习笔记12:充电时刻——模块
- Python学习笔记(八):面向对象编程、错误调试和测试(快速入门篇)
- 【零基础入门学习Python笔记005】闲聊之Python的数据类型
- 滴水穿石--python 学习笔记--入门 (2)
- Python 学习入门(12)—— 文件
- Python学习入门笔记(二):Python运算符
- JAVA学习笔记12——super关键字+继承的内存分析+组合
- 【零基础入门学习Python笔记001】我和Poyhon的第一次亲密接触:课后测试集答案
- 【零基础入门Python学习笔记008】了不起的分支和循环2
- C++学习笔记(7)——多基类继承的构造函数的调用
- python学习笔记12-类代码编写细节
- python 学习笔记(12)序列化python 对象
- python 学习笔记12-----网络编程
- JavaScript高级程序设计(第2版) 学习笔记:(六)js基于构造函数与原型的继承