- 类名的首字母大写(编码规范推荐)
- 类变量 VS 实例变量
类变量 存在类中,可以通过类名字直接调用
类变量是所有该实例对象公有的区域
通过类名调用的是类变量,类变量只能通过类名调用来修改
通过实例化对象访问时,若无该实例变量,则访问类变量
通过实例化对象修改时,若无该实例变量,则是在该实例对象中添加该属性,而不是修改类变量,实例中不能修改类变量
3. 构造函数 and 析构函数
def __init__(self)
def __del__(self),实例对象销毁时自动做的一些工作
4. 私有 ,前面加__(两个下划线)
self.__age = 0 #私有属性,只能在类中被访问
def __getName(self): #私有方法,只能在类中被访问
return self.name
5. 继承
class Man(Person):
重写父类方法,
class Person: def __init__(self,name): self.name = name self.__age = 0 #私有属性,只能在类中被访问 def __getName(self): #私有方法,只能在类中被访问 return self.name def sleep(self): print("{nam} sleep=====".format(nam = self.name)) class Man(Person): def sleep(self): #重写父类的函数 Person.sleep(self) #调用父类的方法,将子类变量传进去,多态的应用 print("man is sleep") #重构父类方法 man1 = Man("wang") man1.sleep()
重写父类的构造函数:
__init__()传入的参数需要重写父类的构造函数的参数
super(Man,self).__init__(name)(新式类写法)
class Person: def __init__(self,name): self.name = name self.__age = 0 #私有属性,只能在类中被访问 def __getName(self): #私有方法,只能在类中被访问 return self.name def sleep(self): print("{nam} sleep=====".format(nam = self.name)) class Man(Person): def __init__(self,name,age): #需要重写调用父类的构造函数,否则会自己覆盖父类的构造函数,掉不到父类的构造函数 #Person.__init__(name)#经典类写法 super(Man,self).__init__(name) #name 为Person 的参数 self.age = age def sleep(self): #重写父类的函数 Person.sleep(self) #调用父类的方法,将子类变量传进去,多态的应用 print("man is sleep") #重构父类方法 man1 = Man("wang",20) man1.sleep()
多继承,继承是有顺序的
继承中若有多个构造函数时,找到第一个构造函数后就返回
最先从自己本类中查找,然后再在继承中的类中查找
Python2中经典类采用深度优先方式查找类的构造函数
Python3查询时采用广度优先的顺序查找继承的类的构造函数
class Person: def __init__(self,name): self.name = name self.__age = 0 #私有属性,只能在类中被访问 def __getName(self): #私有方法,只能在类中被访问 return self.name def sleep(self): print("{nam} sleep=====".format(nam = self.name)) class Work(object): def work(self,Where): print("{name} work in {whear}".format(name = self.name,whear = Where)) class Man(Person,Work): def __init__(self,name,age): #需要重写调用父类的构造函数,否则会自己覆盖父类的构造函数,掉不到父类的构造函数 #Person.__init__(name)#经典类写法 super(Man,self).__init__(name) #name 为Person 的参数 self.age = age def sleep(self): #重写父类的函数 Person.sleep(self) #调用父类的方法,将子类变量传进去,多态的应用 print("man is sleep") #重构父类方法 man1 = Man("wang",20) man1.sleep() man1.work("shanghai")
6. 多态, 一种接口,多种实现,
可以将子类的指针传给父类,通过传入不同的子类实例,实现不同的功能
将多态接口写在父类中,若不想实例化调用,可以写成静态方法