类是什么?
在 Python 中,类是一种创建对象的模板,定义了对象的属性和方法。通过类可以创建具有相同属性和行为的对象实例。
什么是属性?
属性即是特征,比如:人类的名字、年龄、身高、体重...等特征。
什么是方法?
方法即是动作,比如:人类吃饭、搬砖...等行为。
定义类
语法:
class 类名(父类名):
属性
初始化方法实例方法
......
注意:
类名要满足标识符命名规则,同时要遵循大驼峰命名习惯。类名后面的小括号`()`是写继承的类名的。如果没有继承,可以省略小括号,比如 `class 类名:`
示例:定义类,并使用类创建对象
# 创建类
class Test:
# 定义属性
name = "我是变量,在类中我叫属性"
# 定义初始化方法
def __init__(self):
print("我是初始化方法")
# 定义实例方法
def test(self):
print("我是普通函数,在类中我叫实例方法")
# 使用类
# 通过类创建的变量,这里叫做对象
test = Test() # 使用类创建一个对象,这里创建对象时使用的是初始化方法
print(test.name) # 使用类中的属性
print(test.test()) # 使用类中的实例方法
self 讲解
class Test:
name = "我是变量,在类中我叫属性"
# self 是指向这个类的对象,用于引用调用类中的属性和方法。
def test(self):
# 比如我在类中想使用类中的属性或者方法。
# print(name) #这种方法语法报错
print(self.name) # self.name 可以调用成功
test = Test()
test.test()
类外面添加对象属性
语法:
对象名.属性名 = 值
示例:
class Test:
name = "Tom"
test = Test()
# 添加属性
test.age = 18
# 使用属性
print(test.age)
类里面使用对象属性/方法
语法:
self.属性名
self.方法名()
示例:
class Test:
def hello(self):
# 类中使用类外的属性
print(self.age)
test = Test()
# 类外添加属性
test.age = 18
print(test.hello())
魔法方法
在Python中, __xx__() 的函数叫做魔法方法(Magic Methods),也被称为双下划线方法(Dunder Methods),指的是具有特殊功能的函数,并与 Python 的内置操作符和函数交互。
`__init__` 初始化方法,构造函数。
class Test:
def __init__(self, name, age):
self.name = name
self.age = age
test = Test('Tom', 18)
print(test.name) # Tom
print(test.age) # 18
`__dict__` 打印对象的所有属性值。vars()也是这个作用。
class Test:
def __init__(self, name, age):
self.name = name
self.age = age
test = Test('Tom', 18)
print(test.__dict__) # {'name': 'Tom', 'age': 18}
print(vars(test)) # {'name': 'Tom', 'age': 18}
`__str__` print 打印对象时以字符串表示形式。同比java中的toString方法
class Test:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'Test(name={self.name}, age={self.age})'
test = Test('Tom', 18)
print(test) # Test(name=Tom, age=18)
print(test.__str__()) # Test(name=Tom, age=18)
print(str(test)) # Test(name=Tom, age=18)
`__repr__` 与 __srt__类似,下面是它们的比较
class Test:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f'Test(name={self.name}, age={self.age})'
def __repr__(self):
return f'Person({self.name!r}, {self.age!r})'
test = Test('Tom', 18)
print(test) # Test(name=Tom, age=18)
print(repr(test)) # Person('Tom', 18)
`__call__` 可以让对象像方法一样被调用。作用是可以隐式的调用类中其他的方法,已经由call显示的调用了其他方法。
class Test:
name = 'Tom'
def __call__(self):
self.hello()
def hello(self):
print(f"hello {self.name}")
test = Test()
# 我们想调用类中的 hello 方法时,可以直接这样调用,hello已经由call调用了
test() # hello Tom
`__del__` 析构函数,在对象被垃圾回收(或者我们主动使用del函数)时被调用。用于执行一些清理操作,例如关闭文件、释放资源等。
class Test:
name = 'Tom'
def __del__(self):
# 这里可以写一些关闭资源的操作
print(f"对象已经被删除.")
test = Test()
del test # 对象已经被删除.
Python中还有什么很多魔法方法,这里就不一一演示了。
完。