
- class Person:
- name = 'unknown'
- age = -1
- sex = 0
- partner = None
-
- def __init__(self, name, age, sex, partner):
- self.name = name
- self.age = age
- self.sex = sex
- self.partner = partner
-
- def __log(self):
- print(self.name, self.age, self.sex, self.partner)
-
- def greet(self):
- print(f"hello, {self.name}")
- self.__log()
-
-
- p1 = Person('Polaris', 18, 1, None)
- p2 = Person('PolarisX', 19, 1, p1)
- p2.partner.greet()
- class Person:
- _id = -1
- name = 'unknown'
- age = -1
- sex = 0
- partner = None
-
- def __init__(self, name, age, sex, partner):
- self._id = random.randint(0, 10000)
- self.name = name
- self.age = age
- self.sex = sex
- self.partner = partner
-
- def __log(self):
- print(self.name, self.age, self.sex, self.partner)
-
- def greet(self):
- print(f"hello, {self.name}")
- self.__log()
-
- def _getID(self):
- return self._id
-
-
- class Teacher(Person):
- __tid = -1
-
- def __init__(self, name, age, sex, partner):
- super().__init__(name, age, sex, partner)
- self.__tid = random.randint(0, 10000)
- # 打印ID和TID
- print(super()._getID(), self.__tid)
-
-
- class Driver(Person):
- __did = -1
-
- def __init__(self, name, age, sex, partner):
- super().__init__(name, age, sex, partner)
- self.__did = random.randint(0, 10000)
- # 打印ID和TID
- print(super()._getID(), self.__did)
-
-
- t1 = Teacher('Polaris', 18, 1, None)
- d1 = Driver('PolarisX', 20, 1, None)

- class Teacher(Person):
- __tid = -1
-
- def __init__(self, name, age, sex, partner):
- super().__init__(name, age, sex, partner)
- self.__tid = random.randint(0, 10000)
- # 打印ID和TID
- # print(super()._getID(), self.__tid)
-
- def __str__(self):
- return f"Teacher(name={self.name}, age={self.age}, sex={self.sex}, partner={self.partner})"
-
-
-
- print(Person('Polaris', 18, 1, None))
- print(Teacher('Polaris', 18, 1, None))
-
-
- >>> <__main__.Person object at 0x10291f050>
- >>> Teacher(name=Polaris, age=18, sex=1, partner=None)
- # 重定义小于
- def __lt__(self, other):
- return self.age < other.age
-
- # 重定义等于
- def __eq__(self, other):
- return self.age == other.age
-
- # 重定义小于等于
- def __le__(self, other):
- return self.age <= other.age
-
-
- t1 = Teacher('Polaris', 22, 1, None)
- t2 = Teacher('PolarisX', 22, 1, None)
- print(t1 > t2)
- print(t1 == t2)
- print(t1 <= t2)
-
-
-
- >>> False
- >>> True
- >>> True
有些情况下,类的方法可能继承自父类,但父类的方法又不能满足新类的需求,我们可以实现复写:
- class Phone2(Phone):
-
- def call_by_5g(self):
- if super()._check_5g():
- print('phone2 call by 5g')
- else:
- print('phone2 call by 4g')
-
-
-
- phone2 = Phone2(True)
- phone2.call_by_5g()
-
-
-
- >>> phone2 call by 5g
类型注解和TS的类似,具体如下:
- num1: int = 1
- num2: float = 1.2
- str1: str = 'hello'
- bool1: bool = True
- list1: list[int, float] = [1, 2, 3]
- tuple1: tuple[int, bool] = (1, True)
- dict1: dict[str, int | str | bool] = {'name': 1, 'age': 18, 'tel': '123456789X', 'is_married': True}
- set1: set[int] = {1, 2, 3}
-
- num3 = 1 # type: int
- num4 = 1.2 # type: float
- str2 = 'hello' # type: str
- bool2 = True # type: bool
- list2 = [1, 2, 3] # type: list[int, float]
- tuple2 = (1, True) # type: tuple[int, bool]
- dict2 = {'name': 1, 'age': 18, 'tel': '123456789X', 'is_married': True} # type: dict[str, int | str | bool]
- set2 = {1, 2, 3} # type: set[int]
-
- p1 = Person('Pole', 18, '123456789X', True) # type: Person
- from typing import Union
-
- dict3: dict[str, Union[bool, str]] = {'name': 'p1'}
- class Person:
-
- def speak(self):
- pass
-
-
- class Teacher(Person):
-
- def speak(self):
- print('Teacher speak')
-
-
- class Driver(Person):
-
- def speak(self):
- print('Driver speak')
-
-
- def speakSth(p: Person):
- p.speak()
-
-
- p1 = Person()
- t1 = Teacher()
- d1 = Driver()
-
- speakSth(p1)
- speakSth(t1)
- speakSth(d1)
-
-
-
- >>> Teacher speak
- >>> Driver speak