类的概述
- 类是对数据和函数的封装。
- 创建一个类就是创建了一个新的数据类型。
- 类的实例通过属性来显示它的状态。
- 类可以通过方法(函数)来修改它的状态。
创建一个简单的类
class Human:
age = 0
def getAge(self):
return self.age
if __name__ == '__main__':
# 创建一个 Human 类的实例
h1 = Human()
# 打印默认的年龄属性
print(h1.getAge())
# 修改实例的年龄属性
h1.age = 100
# 打印修改后的年龄属性
print(h1.age)
使用构造方法创建实例
- 如果没有显示的构造方法,python在实例化时会调用默认的构造方法,我们可以根据需要显示的定义构造方法
class Human:
age = 0
# 定义构造方法,初始化年龄属性
def __init__(self, age):
self.age = age
def getAge(self):
return self.age
if __name__ == '__main__':
# 创建一个 Human 类的实例
h1 = Human(30)
# 打印默认的年龄属性
print(h1.getAge())
# 修改实例的年龄属性
h1.age = 100
# 打印修改后的年龄属性
print(h1.age)
- 定义了构造方法后,默认的构造方法就会被隐藏,在实例化对象的时候,一定要根据构造方法的参数列表传递参数,否则会创建对象失败。
创建多个构造方法
因为python不支持重载,所以定义两个"init_""方法时无效的,后面的会覆盖前面的
class Human:
age = 0
name = ""
# 定义构造方法,初始化姓名和年龄属性
def __int__(self, name, age):
self.name = name
self.age = age
# 定义构造方法,初始化年龄属性
def __init__(self, age):
self.age = age
def getAge(self):
return self.age
if __name__ == '__main__':
h2 = Human("tom",50)
print(h2.age)
打印结果:
输出结果报错
h2 = Human("tom",50)
TypeError: Human.__init__() takes 2 positional arguments but 3 were given
可以使用python自带的装饰器classmethod来修复这个问题
class Human:
age = 0
name = ""
# 定义构造方法,初始化姓名
@classmethod
def createHuman(cls, name):
return cls(name, 0)
# 定义构造方法,初始化姓名和年龄属性
def __init__(self, name, age):
print("调用Human的构造方法")
self.name = name
self.age = age
def getAge(self):
return self.age
if __name__ == '__main__':
h1 = Human.createHuman("tom")
print(h1.age, h1.name)
h2 = Human("jack", 50)
print(h2.age,h2.name)
打印结果:
调用Human的构造方法
0 tom
调用Human的构造方法
50 jack