类和对象
1.类的属性
在Python中,构造函数就是类的__init__
方法,当一个类定义了__init__
方法后,类在实例化时会自动调用__init__
方法,用于创建新的类实例。在构造方法中我们可以初始化一些属性(或称成员变量、类变量)。
class Dog:
def __init__(self,name)
self.name=name
self.age=3
dog=Dog("旺财")
print(dog.name) #旺财
print(dog.age) #3
类中定义的方法第一个参数必须是“self”,即def play(self)
。
私有属性可用dog.__name
加两条下划线的形式,只能在类内进行修改。私有方法同理。
2.继承
定义要从哪个父类继承,只需在定义子类的名字后面的括号中填入父类的名字即可,如:
class Animal:
def __init__(self,name)
self.name=name
self.age=3
class Dog(Animal):
pass
3.多态
多态的意思就是多种形态。多态意味着即使不知道变量所引用的对象是什么类型,也能对对象进行操作。多态会根据类的不同表现出不同的行为。
(1)继承方式实现多态
class Animal:
def say(self):
print("Animal")
class Dog(Animal):
def say(self):
print("Dog")
class Cat(Animal):
def say(self):
print("Cat")
dog=Dog()
dog.say() #Dog
cat=cat()
cat.say() #cat
ps:判断一个实例是否是某个对象可以用isinstance
函数,格式为isinstance(dog,Dog)
,返回True
orFalse
。
(2)函数参数实现多态
#接上例
def animal_say(animal:Animal)
animal.say()
animal_say(dog)
animal_say(cat)
(3)鸭子类型
鸭子类型中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口决定的,而是由当前方法和属性的集合决定的。
class Dog:
def say(self):
print("Dog")
class Cat:
def say(self):
print("Cat")
def animal_say(animal): #编写一个函数,使它接受一个类型为鸭子的对象
animal.say()
dog=Dog()
cat=Cat()
animal_say(dog)
4.静态方法和类方法:
(1)静态方法:
定义静态方法时,在定义函数的上面一行添加“@staticmethod
”,且静态方法不再有第一个默认参数“self
”,本身也不能调用成员变量和成员方法。
class Animal
name="动物"
@staticmethod
def play()
print("Playing")
Animal.play()
(2)类方法
类方法将该方法绑定在定义的类上,而不是绑定在实例上。在定义函数的上面一行添加“@classmethod
”,有初始参数"cls
",类方法指向的是定义的类本身,类方法可以读取和修改类变量。
class Animal
name="动物"
@classmethod
def play(cls)
print(c"Playing")
Animal.play()