对象和类
对象即包含数据(变量,习惯称为特性,attribute),也包含代码(函数,也称为方法)
使用class定义类:
class Person():
def __init__(self,name):
self.name=name
使用Person类创建对象:
hunter = Person(‘Elmer Fudd’)
继承:
从已有类中衍生出新的类,添加或修改部分功能。将原始的类称为父类、超类或基类,将新的类称作孩子类、子类或衍生类。
class Car():
pass
class Yugo(Car):
pass
Yugo是Car的子类,定义子类时需要把父类的名字放在子类名字后面的括号里。
覆盖方法:
在子类中,可以覆盖任何父类的方法,包括init()添加新方法:子类可以添加父类中没有的方法。 使用super从父类得到帮助:通过super()方法获取父类Person的定义。super().__init(name) 使用属性对特性进行访问:一些私有属性、方法,无法从对象外部直接访问,需要编写getter和setter方法对私有特性进行读写操作。 使用名称重整保护私有特性:由连续的两个下划线开头()
方法的类型:
实例方法(instance method):以self作为第一个参数的方法。 类方法(class method):用前缀修饰符@classmethod指定的方法,对类作出的任何改变会对它的所有实例对象产生影响。类方法的第一参数是类本身,这个参数常被写作cls。 静态方法(static method):用@staticmethod修饰,它即不需要self参数也不需要class参数。
class A()
count = 0
def __init__(self)
A.count+=1
def exclaim(self):
print(“I’m an A!”)
@classmethod
def kids(cls)
print(“A has”, cls.count,”little objects.”)
easy_a = A()
breezy_a = A()
wheezy_a = A()
A.kids()
A has 3 little objects.
上面的代码中,我们使用的是A.count(类特性),而不是self.count(可能是对象的特性)。在kids()方法中,我们使用的是cls.count,它与A.count的作用一样。
特殊方法(special method):
有时也被称作魔术方法(magic method),这些特殊方法的名称以双下划线(__)开头和结束。
组合(composition):
聚合(aggregation):