定义类
class ClassName:
<statement-1>
.
.
.
<statement-N>
上诉的方式即可定义一个类,类相当于你定义了一个东西,这个东西有自己的动作(函数/方法)也有自己的属性
Class对象
可以进行属性引用和实例化
属性引用可以直接使用obj.name来进行调用,在调用类的时候加上括号即可进行实例化,实例化后需要对类使用__init__()方法进行初始化,并进行属性调用,如下
class Test:
def __init__(self,name,age):
self.name = name
self.age = age
x= Test("张三",45)
print(x.name)
print(x.age)
结果为:
张三
45
同时也可以使用调用类中的方法:
class Dog:
def __init__(self, name):
self.name = name
self.tricks = [] # creates a new empty list for each dog
def add_trick(self, trick):
self.tricks.append(trick)
e = Dog('Buddy')
e.add_trick('play dead')
print(e.name)
print(e.tricks)
结果为:
Buddy
['play dead']
继承
继承指的是一个类继承另外一个类中的属性或者是方法,同时也支持跨域进行继承,下面是一个简单的例子:
class DerivedClassName(modname.BaseClassName):
同时也支持多个类继承,使用逗号分隔就可以了
class DerivedClassName(Base1, Base2, Base3):
<statement-1>
.
.
.
<statement-N>
单继承
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
raise NotImplementedError("Subclass must implement abstract method")
class Dog(Animal):
def speak(self):
return f"{self.name} says Woof!"
dog = Dog("Buddy")
print(dog.speak()) # 输出: Buddy says Woof!
多继承
class CanFly:
def fly(self):
return "I can fly!"
class CanSwim:
def swim(self):
return "I can swim!"
class Duck(CanFly, CanSwim):
pass
duck = Duck()
print(duck.fly()) # 输出: I can fly!
print(duck.swim()) # 输出: I can swim!
方法重写和调用父类方法,调用父类方法的时候使用super().方法
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
return "Some animal sound"
class Dog(Animal):
def speak(self):
# 调用父类的speak方法
animal_sound = super().speak()
return f"{self.name} says Woof! {animal_sound}"
dog = Dog("Rex")
print(dog.speak()) # 输出: Rex says Woof! Some animal sound
私有变量
python中不没有私有变量的定义,不过一般普遍的约定是使用_的方式来标记私有变量