类与对象
python类的语法 关键字class 具有某一类共同属性和特性的事物
class 类名(): 这里加不加括号都可以
xxxx
类名的规范:数字字母下划线组成,不能以数字开头,首字母大写,驼峰命名,见名知意
类属性:放在类里面的变量值
类方法:放在类里面的函数
实例/对象:具体的一个例子,类名()
实例具有类里面的所有属性和方法的使用权限
调用属性方法:实例.属性名
调用方法/函数名:实例.方法名() 实例.函数名()
self:固定的占坑符号,类里面的实例方法必须带self这个参数,self代表实例本身
类方法(3种)
实例方法:这个方法只能实例来调用
class Teacher:
def cooking(self):
print('我会做饭')
t=Teacher() 实例 隐式的传递
t.cooking() 实例化调用属性和实例方法 可以这么写
Teacher.coding() 不可以这么写,会报错,只能实例来调用
Teacher.coding(t) 显示的传递实例也可以 不建议使用
类方法:
class Teacher:
@classmethod 类方法
def swimming(cls):
print('我会游泳')
Teacher.swimming() 可以这么写
t=Teacher()
t.swimming() 可以这么写
静态方法:普通方法
class Teacher:
@staticmethod 静态方法
def sing(cls):
print('我会唱歌')
Teacher.sing() 可以这么写
t=Teacher()
t.sing() 可以这么写
类里面的属性和函数只能实例去调用
self.name
self.coding()
不同点:静态方法,类方法不可以调用类里面的属性值,如果你要参数,只能自己传递
什么时候去定义为静态和类方法?
当你的某个函数与其他的类函数,类属性没有关系就可以定义为静态和类方法 ,这样方便使用,不用去创建实例去调用,直接类.函数名就可以调用
初始化函数
class Teacher:
def __init__(self,参数1,参数2,参数3): 一般不传动态参数和关键字参数,用位置参数或默认参数
pass 没有return返回值
t1 = Teacher(1,2,3)
什么时候用初始化函数?想用就用
如果某个属性值是多个函数共用的 就可以用初始化函数
初始化里面的初始化操作,可以带参数也可以不带参数
跟普通函数一样可以带默认参数
初始化函数里面可以有赋值好了的属性值
每次创造一个实例,需要传递跟初始化函数参数个数一致的值
每个实例都自动调用初始化函数,需要传递对应的参数
初始化参数的写法要注意怎么把参数赋值给self.参数名,参数名字不一定要一致,但是赋值要正确
初始化函数无返回值
继承
继承的类,是否要用到初始化函数,需要看父类里面是不是有初始化函数
父类有的,继承后,子类都可以使用
父类有,子类也有重名的函数,子类的实例优先调用自己的函数,叫重写
想在子类的函数里面调用父类的一个函数,直接实例调用 self.xx()
父类没有,子类有的函数,叫拓展
多继承,继承多个父类
具有两个父类的属性和方法,如果两个父类具有同名方法的时候 就近原则
超继承
重写父类里面的方法,但是又想继承父类方法里面的所有代码可以使用超继承
class Parent:
def test(self):
print('父类代码')
class Sub(Parent):
def test(self):
super(Sub,self).test()
print('子类代码')
Sub().test()