在 Python 中访问父类属性

在 Python 中访问父类属性

Accessing parent class attributes in Python

要访问子类中的父类属性:

  1. 使用该super()方法在子级中调用父级的构造函数。
  2. __init__()方法将设置实例变量。
  3. 访问self对象上父类的任何属性或方法。
主程序
class Employee(): cls_id = 'emp-cls' def __init__(self, name): self.salary = 100 self.name = name class Developer(Employee): def __init__(self, name): # 👇️ invoke parent __init__() method super().__init__(name) # 👇️ accessing parent instance variable print(self.salary) # 👉️ 100 # 👇️ accessing parent class variable print(self.cls_id) # 👉️ emp-cls d1 = Developer('bobbyhadz') print(d1.salary) # 👉️ 100 print(d1.cls_id) # 👉️ 'emp-cls'

代码片段显示了如何从子类访问父类变量和父实例变量。

cls_id属性是一个类变量。

可以直接在子类或子类本身的实例上访问类变量。
主程序
class Employee(): cls_id = 'emp-cls' class Developer(Employee): def __init__(self, name): # 👇️ accessing parent class variable print(self.cls_id) # 👉️ emp-cls d1 = Developer('bobbyhadz') print(d1.cls_id) # 👉️ 'emp-cls' print(Developer.cls_id) # 👉️ 'emp-cls'

要访问父实例变量,调用类的构造方法来运行父__init__()方法中的代码。

主程序
class Employee(): def __init__(self, name): self.salary = 100 self.name = name class Developer(Employee): def __init__(self, name): # 👇️ call parent __init__() method super().__init__(name) print(self.salary) # 👉️ 100 d1 = Developer('bobbyhadz') print(d1.salary) # 👉️ 100

super()方法使我们无需显式引用即可访问基类。

我们可以将对的调用替换为super()Employee达到相同的结果。

主程序
class Employee(): def __init__(self, name): self.salary = 100 self.name = name class Developer(Employee): def __init__(self, name): Employee.__init__(self, name) print(self.salary) # 👉️ 100 d1 = Developer('bobbyhadz') print(d1.salary) # 👉️ 100
但是,super()比显式引用基类更灵活、更常用。

对父__init__方法的调用运行该方法并将
salaryname属性分配给实例。

现在我们可以访问子类实例的父类salaryname属性。

示例中的类假设需要一个name参数。

这是相同的示例,但是在实例化子类时没有传递任何参数。

主程序
class Employee(): def __init__(self): self.salary = 100 class Developer(Employee): def __init__(self): super().__init__() print(self.salary) # 👉️ 100 d1 = Developer() print(d1.salary) # 👉️ 100

一旦父__init__()方法中的代码运行,实例就会被分配一个salary属性,可以在self对象上访问该属性。

您可以使用相同的方法从子类访问父类中定义的方法。

主程序
class Employee(): def __init__(self, name): self.salary = 100 self.name = name def greet(self): print(f'Hello {self.name}') class Developer(Employee): def __init__(self, name): super().__init__(name) print(self.salary) # 👉️ 100 self.greet() # 👉️ Hello bobbyhadz d1 = Developer('bobbyhadz') print(d1.salary) # 👉️ 100 d1.greet() # 👉️ Hello bobbyhadz

父级定义了greet()子实例可以通过self对象访问的方法。