1. 方法属性化@property, @kind.setter设置 @kind.deleter删除
class Cat:
__kind = '猫'
def __init__(self,name):
self.name = name
@property
def kind(self):
return self.__kind
@kind.setter
def kind(self,kind):
self.__kind = kind
@kind.deleter
def kind(self):
del self.__kind
xb = Cat('小白')
设置setter和deleter两个作用, 1. 权限分离, 分别控制 2. 封装
使用一下:
xb.kind = '橘猫' # 调用的kind.setter
xb.kind
del xb.kind # 调用kind.deleter
xb.kind # 删除以后就没有kind属性了,执行会报错
2. 静态方法
- 只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性。
- 什么时候用, 类中要想实现某个功能,功能和类本身没有关联, 操作对类本身没有任何影响
class Dog:
def __init__(self,name):
self.name = name
# 静态方法实际上根类没什么关系,单纯变成一个函数。self并不能调用name
@staticmethod
def eat(name,food):
return "%s正在吃%s" %(name,food)
xh = Dog('小黑')
xh.eat('小白','骨头')
3. 类方法
- 只能访问类属性,不能访问实例(对象)属性
class Dog:
kind = '狗'
def __init__(self,name):
self.name = name
@classmethod
def eat(cls,food):
print("%s正在吃%s" %(cls.kind,food))
xh = Dog('小黑')
xh.eat('骨头') # 狗正在吃骨头
以上案例中, 类方法, 参数改为cls, 只能调用类属性kind ,不能调用对象属性name
留言