一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第20天,点击查看活动详情。
类中的特殊方法:
1.类方法
实例方法:访问类属性,也可以访问实例属性
类方法:在类中的方法前面添加装饰器:@classmethod,这个方法成为了类方法
注意:在类方法中只能访问类属性,不能访问实例属性
Why?
类方法中第一个形参,并不是引用对象本身,而是引用类,也就是类本身 。 第一个形参本质上就不是self,先写@classmethod装饰器,再写方法时 开发工具自动添加的第一个形参是cls,通过类本身,只能访问到类属性,而不能访问实例属性
Python中:对象名.属性名 = 表达式
1>属性不存在,则给对象添加了一个属性
2>属性存在,则修改对象的属性值
应用场景?
封装类属性,在类的方法中专门用来访问类属性,“专职专方法”
2.静态方法
C++|Java,静态方法 static ,只能访问静态属性,不能访问实例属性、
使用方法:
在类主体中的方法前面添加一个装饰器:@staticmethod,此方法就成为了静态方法
注意:静态方法是被“隔离”的方法,在静态方法中不能访问类的成员,也不能访问对象的成员。
why?
静态方法第一个形参不是self,也不是cls。
来个例子:
class Employee:
emp_count = 0
def __init__(self):
self.salary = 6000
self.name = "Tom"
@staticmethod
def show():
# 静态方法第一个形参不是self,也不是cls
# print("name= ",self.name)
# print("count =",cls.emp_count)
print("我就是一个被隔离的静态方法")
emp = Employee();
emp.show()
3.属性方法
使用方法:
在类的主体中的方法前面添加一个装饰器:@property,这个方法就变成了属性方法。 此方法的调用格式不是函数调用格式,而使用属性访问方式调用此方法。
来个例子:
class Student:
def __init__(self,name,age):
self.__name = name
self.__age = age
# 属性的访问器使用属性方法来定义
# 属性方法名 = 属性名的第一个字母大写
@property
def Name(self):
return self.__name
@Name.setter
def Name(self,name):
self.__name = name