python的入门19
类的组合
类的组合是指在新创建的类中包含有已有类的对象作为其属性。
类的组合(composition)是类的另一种重用方式。如果程序中的类需要使用其他类的对象,就可以使用类的组合方式。组合关系可以用“has-a”关系来表达,就是一个主类中包含其他对象。
1、第一种组合方法
输出结果为:
在第一种方法中,在Computer类的初始化方法中分别传递显示器尺寸displaySize和内存大小memorySize给两个组合对象所属类的初始化方法,在组合类Computer中创建被组合的对象。
注:
-
上面的class computer中的 self.display就是创建了一个display的属性
-
在上面的代码中,Computer 类有两个属性 display 和 memory,它们分别是 Display 和 Memory 类的实例。Display 类有一个属性 size,而 Memory 类也有一个属性 size。
-
当你使用 d.display.size 和 d.memory.size 时,它们分别访问了 Computer 对象 d 的 display 和 memory 属性,并且获取了对应的 size 属性的值,然后将这些值打印出来。
2、第二种类的组合
第二种方法是在主程序中创建被组合类的对象,然后将这些对象传递给组合类。
输出结果为:
注:在第二种方法中,组合类的初始化方法参数由两个被组合类的对象组成。因此,在主程序中需要预先创建被组合对象,然后将这些对象作为参数传递给组合类的初始化方法,最终赋值给组合类的对象属性。
-
在这段代码中,if name == “main”: 语句块包含了 main() 函数的调用,这意味着只有当该文件作为主模块直接运行时,才会执行 main() 函数。如果该文件被其他模块导入,main() 函数不会自动执行。
-
在Python中,if name == “main”: 是一个常见的约定用法。它判断当前模块是否是被直接运行的主模块,而不是被作为其他模块的导入模块。
-
当一个Python文件作为主模块直接运行时,name 的值将被设置为字符串 “main”,而当它被导入为一个模块时,name 的值将是模块的名称。
-
因此,通过使用 if name == “main”: 条件判断,你可以指定在该模块被直接运行时要执行的特定代码块。这样可以将一些测试代码或者需要在模块作为主程序运行时执行的逻辑隔离开来,而不会在该模块被导入时自动执行。
3、继承与组合的结合
class Student(object):
def __init__(self, num):
self.num = num
class Teacher(object):
def __init__(self, num):
self.num = num
class School(object):
def __init__(self, num1, num2):
self.student = Student(num1)
self.teacher = Teacher(num2)
school = School(100, 10)
print(school.student.num, school.teacher.num)
输出结果为:
上面的类都继承了object类,object类是使用类的父类。