day23
今日所学:
一:类属性与对象属性
类中应该仅存储所有对象共有的内容,如所有人的国籍相同就放到类中
对象中存储每个对象独有的内容,如每个人的名字都不同
二:init方法的作用
init 是对初始化的缩写,用于对象的属性设置初始值特点:
1,执行时机:当实例化产生对象时会自动执行该函数
2,会自动传入需要初始化的对象
3,初始化必须包含至少一个参数 用于表示对象本身
4,该函数不允许有返回值,必须为None
三:绑定方法
方法就是函数,那就是说绑定方法 ==绑定函数
默认情况下 在类中定义的方法 都是绑定方法
绑定方法是把函数和对象绑定到一起
方法分为两种
1.绑定方法
1.1对象绑定方法
在使用对象调用时会自动传入对象本身
1.2类绑定方法
@classmethod
在使用对象调用时会自动传入类本身
在使用类来调用时也会自动传入类本身
单例模式中就会经常使用@classmethod
到底绑定给谁?
当你的方法执行过程中需要使用到对象中数据时就绑定给对象
当你的方法执行过程中需要使用到类中数据时就绑定给类
2.非绑定方法
即不需要对象中的数据 也不需要类中的数据 那就定义为非绑定方法,就是普通函数
@staticmethod
1.属性应该放在类中还是对象中
2.绑定方法 == 绑定函数
对象绑定方法
对象调用时 自动传入对象本身
类调用时不会自动传参 有几个就需要传几个
类绑定方法
@classmethod
无论是对象还是类调用 都会自动传入类本身
非绑定方法(静态方法)
@staticmethod
谁调用都不会自动传参
继承
被继承的一方(王健林) 称之为父 继承的一方(王思聪) 称之为子
在OOP中 继承描述是类和类之间的关系 例如b类继承a类 b类可以直接使用a类中的属性和方法
a是父类(基类,超类) b是子类(派生类)
好处:极大的提高了代码的复用性
如何使用继承,至少需要两个类
语法:
class 子类名称(父类名称):
pass
class Teacher:
school = "oldboy"
def __init__(self,name,age):
self.name = name
self.age = age
def say_hi(self):
print("hello i am %s" % self.name)
def teach(self):
print("正在教书......")
class Student(Teacher):
pass
print(Student.school)
print(Student.say_hi)
print(Teacher.say_hi)
s = Student("rose","123")
s.say_hi()
s.teach()
在上述案例中通过继承 学生就拥有了老师的所有内容 但是学生不应该教书这个技能
意味着这个继承关系 有问题 不合理
需要先抽象 在继承