类,描述相同属性和方法的对象的集合,对象是类的实例
(理解,类就是很多个对象,对象就是类中的一个例子)
属性:通用属性
方法:通用函数
方法:
类中函数第一个参数必须是self,类中的函数叫方法!
其中self的含义就是指具体某一个对象
常见第一个方法为初始化,当然也可以不初始化
属性:
描述对象的内容,由类共同定义,比如name属性
class animal:
def init(self, name, max_age):
self.name = name
self.class_name = “animal”
self.max_age = max_age
dog = animal(“dog”, 18)
print(dog.name)
print(dog.class_name)
print(dog.max_age)
第一大特性:封装
A.将对象的信息封装到由类定义的属性中
这样每个对象都有封装的属性信息啦!而普通函数就做不到这样清晰明确的每个对象都有一些通用属性可以输出!
比如将对象dog的属性信息age = 18封装到对象的属性中
B.将封装的信息从类的属性中调用出来
第一种方法,当然直接从对象中输出属性信息
第二种方法,类中定义一个方法,可以直接输出当前对象的属性,对象调用类方法
第二大特性:继承
继承就没有封装那么简单啦,是指两个类之间的关系
继承-一个类继承另一个类定义的属性和方法
目的:不用重复定义多个类的属性和方法啦
子类继承了父类的方法和属性定义,就是就是可以用这些方法和属性啦
但如果父类需要接受的属性,目前还不知道子类的对象如何传送给父类
class animal:
def init(self, max_age):
self.class_name = “animal”
self.max_age = max_age
def drink(self):
print('drink by %s' % self.name)
class dog(animal):
def init(self, name):
self.name = name
dog_a = dog(“a”)
dog_a.drink()
print(dog_a.max_age)
更复杂的问题:多个类的处理
A.是否可以继承多个类
明确的一点是:python可以继承多个类,而java和C#不能(python最好!)
B.如果多个类中的函数相同,会使用哪一个函数
经典类多继承时,使用深度
新式类多继承时,使用广度
每次找到就立即停止,可以说解决冲突的方法比较贪婪,哈哈
判断经典和新式判断当前或者父类是否为object类
(疑问,那么父类一个是object,一个是经典,是否也当成object来计算呢)
class C:经典
class D(C):经典
class C(object):新式
classs D(C):新式
第三大特性,多态
多态即,可以使用不同类中的方法
那么定义函数为接收一个类
调用这个类的方法
如果接收的是一个子类,就使用子类的方法
接收不同子类,使用方法不同
class animal:
pass
class dog(animal):
def drink(self):
print (‘drink by dog’)
class cat(animal):
def drink(self):
print (‘drink by cat’)
def Func(animal):
animal.drink()
dog1 = dog()
cat2 = cat()
Func(dog1)
Func(cat2)
通过函数定义接收父类,使用父类的方法
实际接收子类,使用子类的方法
因为子类不同,实现了父类的多态