Python入门 - 面向对象
常见概念

类和对象
class MyClass: num = 0 s = "" def __init__(self): # 构造函数 pass def print_info(self): print("num is: %s, str is: %s" %(self.num, self.s)) pass a = MyClass() a.num = 88 a.s = "hello" a.print_info() # num is: 88, str is: hello
带参数构造函数
class MyClass: def __init__(self, num: int, s: str): # 带参数构造函数 self.num = num self.s = s def print_info(self): print("num is: %s, str is: %s" %(self.num, self.s)) a = MyClass(88, "hello") a.print_info() # num is: 88, str is: hello a.num = 80 a.s = "world" a.print_info() # num is: 80, str is: world
访问控制
python中只支持public和private,没有protected, internal
class MyClass: __num = 0 _s = "" def __init__(self, num: int): self.__num = num def print_info(self): print("num is: %s, str is: %s" % (self.__num, self._s)) def __print_info(self): print("num is: %s, str is: %s" % (self.__num, self._s)) a = MyClass(88) a._s = "hello" a.print_info() # num is: 88, str is: hello # a.__num = 30 # 私有变量无法访问, 会抛异常 # a.print_info() # 私有成员函数无法访问, 会抛异常
继承
class Parent: def __init__(self, n: int): self.num = n class Child(Parent): def __init__(self, num: int): Parent.__init__(self, num) # 调用父类构造函数, 或者super(num).__init__(); 或者super(Child, self, num).__init__() self.num2 = 0 def print_info(self): print("Child: num: %s, num2: %s" % (self.num, self.num2)) a = Child(80) a.num2 = 30 a.print_info() # Child: num: 80, num2: 30
super
class Parent: num = 0 def do_add(self): self.num += 1 # add num class Child(Parent): num2 = 0 def do_add(self): super().do_add() # 也可以这样写: super(Child, self).do_add() self.num2 += 2 a = Child() a.do_add() print("num:%s, num2:%s" % (a.num, a.num2)) # num:1, num2:2
override覆盖,多态
class Parent: num = 0 def test_override(self): print("Parent: num: %s" % self.num) class Child(Parent): num2 = 0 def test_override(self): print("Child: num: %s, num1: %s" % (self.num, self.num2)) a = Parent() a.num = 1 a.test_override() # Parent: num: 1 a = Child() a.num = 20 a.num2 = 30 a.test_override() # Child: num: 20, num1: 30 super(Child, a).test_override() # Parent: num: 20, 子对象调用父类函数
静态变量
class MyClass: num = 0 @staticmethod def do_add(a: int, b: int): # self.num = a + b # 无法访问成员变量 c = a + b print(c) MyClass.do_add(1, 2) # c
不支持的特性
静态变量
接口(纯虚类)
抽象类(虚基类)
抽象函数(纯虚函数)

浙公网安备 33010602011771号