类的语法
- 类的定义
1 class Dog(object): 2 3 print("hello,I am a dog!") 4 5 6 d = Dog() #实例化这个类, 7 #此时的d就是类Dog的实例化对象 8 9 #实例化,其实就是以Dog类为模版,在内存里开辟一块空间,存上数据,赋值成一个变量名
- 类的初始化
1 class Dog(object): 2 3 def __init__(self,name,dog_type): 4 self.name = name 5 self.type = dog_type 6 7 def sayhi(self): 8 9 print("hello,I am a dog, my name is ",self.name) 10 11 12 d = Dog('LiChuang',"京巴") 13 d.sayhi()
- 类的方法
__init__
方法 相当于构造函数
class Cat: """这是一个猫类""" def __init__(self): print("初始化方法")
__del__方法相当于析构函数
class Cat: def __init__(self, new_name): self.name = new_name print("%s 来了" % self.name) def __del__(self): print("%s 去了" % self.name)
- 定义私有 属性或方法
在 定义属性或方法时,在 属性名或者方法名前 增加 两个下划线
class Women: def __init__(self, name): self.name = name # 不要问女生的年龄 self.__age = 18 def __secret(self): print("我的年龄是 %d" % self.__age) xiaofang = Women("小芳") # 私有属性,外部不能直接访问 # print(xiaofang.__age) # 私有方法,外部不能直接调用 # xiaofang.__secret()
- 类的继承
1) 继承的语法
class 类名(父类名): pass
2)重写(override)
当 父类 的方法实现不能满足子类需求时,可以对方法进行 重写(override)
重写 父类方法有两种情况:
- 覆盖 父类的方法
- 对父类方法进行 扩展
1) 覆盖父类的方法
- 如果在开发中,父类的方法实现 和 子类的方法实现,完全不同
- 就可以使用 覆盖 的方式,在子类中 重新编写 父类的方法实现
具体的实现方式,就相当于在 子类中 定义了一个 和父类同名的方法并且实现
重写之后,在运行时,只会调用 子类中重写的方法,而不再会调用 父类封装的方法
2) 对父类方法进行 扩展
- 如果在开发中,子类的方法实现 中 包含 父类的方法实现
- 父类原本封装的方法实现 是 子类方法的一部分
- 就可以使用 扩展 的方式
- 在子类中 重写 父类的方法
- 在需要的位置使用
super().父类方法
来调用父类方法的执行 - 代码其他的位置针对子类的需求,编写 子类特有的代码实现
关于 super
- 在
Python
中super
是一个 特殊的类 super()
就是使用super
类创建出来的对象- 最常 使用的场景就是在 重写父类方法时,调用 在父类中封装的方法实现
class Dog(): def bark(self): print("汪汪汪") class XiaoTianQuan(Dog): def bark(self): #子类特有需求 print("像神一样叫...") #使用super()调用父类中的方法 super().bark()
完整例子
class SchoolMember(object): members = 0 #初始学校人数为0 def __init__(self,name,age): self.name = name self.age = age def tell(self): pass def enroll(self): '''注册''' SchoolMember.members +=1 print("