类的基本特性
1. 封装
2. 继承
3. 多态
类的定义和实例化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 定义类 class NewClass(object): # 类的属性 name = "Bob" # 类的方法 def prt(self): print("Hello", self.name) # 定义一个类的实例 n1 = NewClass() # 调用类属性和类方法 print(n1.name) n1.prt() |
构造函数和析构函数
构造函数
用于对示例进行初始化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
class Human(object): # 构造函数,用于对类的实例进行初始化(实例化) def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def running(self): print("%s is running" % self.name) P1 = Human("Paul", 80, "male") P1.running() |
析构函数
用于在对象销毁时进行一些指定工作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
class Human(object): # 构造函数,用于对类的实例进行初始化(实例化) def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def running(self): print("%s is running" % self.name) # 析构函数,用户类的实例销毁时执行清理动作 def __del__(self): print("%s has gone" % self.name) P1 = Human("Paul", 80, "male") P2 = Human("Alice", 30, "female") P1.running() del P1 # 手工销毁 P2.running() # 程序结束后自动销毁 |
类变量和实例变量
类变量
属于类本身的变量,所有类的实例公用的变量
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
# 定义类 class NewClass(object): # 类变量(类属性) name = "Bob" # 定义类的实例 n1 = NewClass() n2 = NewClass() # 调用类属性和类方法 print(n1.name) print(n2.name) NewClass.name = "Mario" print(n1.name) print(n2.name) # 无法通过实例取修改类属性,这样只是给实例自己增加了一个实例属性而已 n1.name = "Lincoln" print(n1.name) print(n2.name) |
实例变量
属于每个实例自己的变量
1 2 3 4 5 6 7 8 9 10 11 12 |
# 定义类 class NewClass(object): def __init__(self, name): print("Hello", self.name) # 其中name为实例变量(属性) # 定义类的实例,不同实例在实例化时可以设置不同的实例属性值 n1 = NewClass("Bob") n2 = NewClass("Mario") # 调用类属性和类方法 n1.prt() n1.prt() |
私有属性和私有方法
私有属性
私有属性是指在类以外不允许修改的属性,只能在内部指定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
class Dog(object): __legs = 4 # 私有属性,仅能内部调用 # 构造函数 def __init__(self, name, kind, color): # 初始化实例属性(变量) self.name = name self.kind = kind self.color = color def running(self): print("%s is running with %s legs" % (self.name, self.__legs)) # 调用私有属性 Husky = Dog("奇奇", "husky", "dark") Husky.running() |
私有方法
与私有属性类似,只能在类的内部调用的方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class Dog(object): # 构造函数 def __init__(self, name, kind, color): # 初始化实例属性(变量) self.name = name self.kind = kind self.color = color def barking(self): print("%s Begin to shout" % self.name) self.__wang() # 调用私有方法 # 私有方法,仅能内部调用 def __wang(self): print("%s Wang Wang Wang" % self.name) Husky = Dog("奇奇", "husky", "dark") Husky.barking() |
类的继承
单继承
类可以派生出子类,子类会继承父类的所有属性和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
class Human(object): def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex class Kids(Human): # 重构父类的构造函数,增加属性 def __init__(self, name, age, sex, father): """super方法根据查找顺序(MRO)取查找符合的类调用, python2中经典类(class XXX:)为深度优先,新式类(class XXX(object):)为广度优先 python3中为广度优先""" super().__init__(name, age, sex) # Python2中应写为:super(Student, self) self.father = father def play(self): print("%s is playing" % self.name) # 实例化对象 K1 = Kids("Leo", 15, "M", "Paul") K1.play() |
多继承
一个类可以继承多个类的属性和方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
class Human(object): def __init__(self, name, age, sex): self.name = name self.age = age self.sex = sex def walk(self): print("%s is walking" % self.name) class Student(object): def study(self): print("%s is studying" % self.name) class Kids(Human, Student): # 重构父类的构造函数,增加属性 def __init__(self, name, age, sex, father): """super方法根据查找顺序(MRO)取查找符合的类调用, python2中经典类(class XXX:)为深度优先,新式类(class XXX(object):)为广度优先 python3中为广度优先""" super().__init__(name, age, sex) # Python2中应写为:super(Kids, self) self.father = father # 实例化对象 K1 = Kids("Leo", 15, "M", "Paul") # 调用父类的方法 K1.study() K1.walk() |
原文链接:Python 从入门到放弃 - Lesson 6 面向对象入门,转载请注明来源!