Python 中组合(Has-A 关系)的实现

原文:https://www . geesforgeks . org/composition-of-has-a-relation-in-python/

我们可以使用这两个概念来访问类中一个类的成员:

  • 按成分(具有-α关系)
  • 通过遗传(Is-A 关系)

这里我们将研究如何在 Python 中使用实现有一个关系

Python 中组合的实现

通过使用类名或创建一个对象,我们可以在另一个类中访问一个类的成员。

示例:

class Engine:
   # engine specific functionality
   '''
   '''
   '''

class Car:
   e = Engine()
   e.method1()
   e.method2()
   '''
   '''

在上面的例子中,汽车级有一个发动机级参考。在 Car 类中,我们也可以创建不同的变量和方法。使用车内引擎类的对象引用,我们可以很容易地访问车内引擎类的每个成员。

示例 1: 用于合成的可执行代码

Python 3

class Employee:

    # constructor for initialization
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # instance method
    def emp_data(self):
        print('Name of Employee : ', self.name)
        print('Age of Employee : ', self.age)

class Data:
    def __init__(self, address, salary, emp_obj):
        self.address = address
        self.salary = salary

        # creating object of Employee class
        self.emp_obj = emp_obj

    # instance method
    def display(self):

        # calling Employee class emp_data()
        # method
        self.emp_obj.emp_data()
        print('Address of Employee : ', self.address)
        print('Salary of Employee : ', self.salary)

# creating Employee class object
emp = Employee('Ronil', 20)

# passing obj. of Emp. class during creation
# of Data class object
data = Data('Indore', 25000, emp)

# call Data class instance method
data.display()

Output

Name of Employee :  Ronil
Age of Employee :  20
Address of Employee :  Indore
Salary of Employee :  25000

在上面的例子中,我们有 2 个类【员工】【数据】。在【数据】类构造器中,我们正在创建一个雇员类的对象,因此我们可以轻松访问雇员类的成员。在数据员工类对象成为“数据”类的实例变量。我们在构造函数中创建对象,所以每当我们调用类雇员的任何方法或变量时,我们必须使用 self 关键字 。我们可以将“self . EMP _ obj”替换为“Employee”,但是通过使用类名 Employee 我们只能访问 Employee 类的静态方法或变量。

示例 2: 使用组合的另一个简单示例

Python 3

class A:
    def __init__(self):
        print('Class - A Constructor')

    def m1(self):
        print('M1 method of Class - A.')

class B:
    def __init__(self):
        print('Class - B Constructor.')

    # instance method
    def m2(self):

        # creating object of class A inside
        # B class instance method
        obj = A()

        # calling m1() method of class-A
        obj.m1()
        print('M2 method of Class - B.')

# creating object of class-B
obj = B()

# calling B class m2() method
obj.m2()

输出

Class - B Constructor.
Class - A Constructor
M1 method of Class - A.
M2 method of Class - B.

在上面的例子中,我们在类 B 的实例方法中创建了一个类 A 的对象,即 m2()方法。所以执行流程将是最初,将创建 B 类的对象,这样 B 类的构造函数将被执行。现在 B 类的对象正在调用 m2()方法,所以光标会转到 B 类的 m2()方法,在 B 类的 m2()方法里面,创建了 A 类的对象,所以执行 A 类的构造函数,然后执行 A 类的 m1()方法,最后打印 m2()方法的最终语句,执行结束在这里。