类定义、属性和继承
类定义
之前我们在数据类型里面学习到了列表的方法,那是怎么做的可以让列表里面放下这么多方法呢?
class Abc: |
输出
<__main__.Abc object at 0x0000024ED872A908> |
cla = ClassName()
cla.fun1()
cla.fun2()
实例化之后,可以实现类似于列表中方法的定义形式
总结
定义:类的定义使用关键字 class
封装:类可以把各种对象组织在一起,通过.(点)运算符来调用类中封装好的对象。
概念:类就像是我们平时说的名词,一个称呼,但是却不是一个具体的实例,比如说:我们都是人,但是人这个名词,不能具体指代你我,我们会用一个人的名字去指代一个具体的人,这个过程就类似于实例化。
属性
1.类数据属性。类属性是可以直接通过“类名.属性名”来访问和修改。类属性是这个类的所有实例对象所共有的属性,任意一个实例对象都可以访问并修改这个属性(私有隐藏除外)。
2.实例数据属性。在属性前面加了self标识的属性为实例的属性,在定义的时候用的self加属性名字的形式,在查看实例的属性时就是通过实例的名称+‘.’+属性名来访问实例属性。
3.方法属性。定义属性方法的内容是函数,函数的第一个参数是self,代表实例本身。
举个栗子
class Animal: |
实例化
cat = Animal('cat','fish') #先不传值 |
输出
hahaha |
类的实例化,实例化后会自动执行init这个初始化函数。
实例属性访问
print(cat.name) |
输出
hahaha |
实例的属性,实例自己可以访问,定义时要加self,不可以 ClassName. attribute(类名.属性)
类属性
print(Animal.eye) |
输出
2 |
直接定义在类中,类和实例都可以访问,没有加self
可以 ClassName. attribute(类名.属性)
扩展
print(Animal.name) |
输出
AttributeError: type object 'Animal' has no attribute 'name' |
类只能访问类属性,不能访问实例属性。
总结
类属性:类的属性,类名和实例都可以调用,相当于类和实例公用的变量
实例属性:实例自己的属性,类不能访问,其他的实例也不能访问
属性调用: 通过属性调用可以直接得到属性的属性值
方法
类中的方法,就是函数,但是被称之为方法,在类中的方法,在被实例调用的时候会自动传入实例本身,因此,在一般情况下,需要在参数中加入self。
class Animal: |
方法调用
cat = Animal('cat','fish') |
输出
hahaha |
类中的self指代的就是实例本身
扩展
cat = Animal('cat','fish') |
输出
hahaha |
继承
如果在B类中定义一个方法,但是这个方法已经在A类中被定义过了,那怎样在B类中使用A类中的方法呢?
class Animal: |
输出
旺财 |
语法规则
class A:
def play(slef):
print(‘hahaha ‘)
class B(A):
pass
总结
类的继承可以让子类将父类的全部方法和属性继承过来.
在python3中,默认继承object类