### 面向对象中的方法
"""
普通方法: 可以有参数,或者无参数,当场正常的函数调用
绑定方法: (1) 绑定到对象(自动传递参数为对象) (2) 绑定到类(自动传递参数为类)
静态方法: 无论是对象还是类,都可以调用,不会默认传递任何参数
"""
class Dog():
name = "旺财"
# 普通方法
def jiao():
print("小狗哇哇哇的叫唤")
# 绑定方法(对象)
def eat(self):
print("小狗喜欢吃骨头")
# 绑定方法(类)
@classmethod
def tail(cls):
print(cls)
print("小狗看到主任喜欢摇尾巴")
#静态方法
@staticmethod
def jump(num):
print("小狗喜欢接飞盘")
obj = Dog()
普通方法 (无参方法只能类调用)
obj.jiao() error
Dog.jiao()
绑定方法 (一般用对象调用)
obj.eat() #(推荐)
Dog.eat(12356)
绑定方法(类)
"""系统自己把类当成参数进行传递"""
Dog.tail() #(推荐)
obj.tail()
静态方法 (不会默认传递任何参数,如果有参数,当成普通方法调用即可.)
obj.jump(1)
Dog.jump(2)
在类外,为对象添加成员方法,默认皆是静态方法.
obj.func = lambda : print(123)
obj.func()
### property
"""
property 可以把方法变成属性使用
作用: 控制属性的获取,设置,删除操作,
变相的增加成员的安全性.可以通过自定义逻辑对成员进行控制
自动触发: 要求:是同一个名字
获取 @property
设置 @属性名.setter
删除 @属性名.deleter
"""
方法一
class MyClass():
def __init__(self,name):
self.name = name
@property
def username(self):
return self.name
# pass
@username.setter
def username(self,val):
print(112233)
val = "朴仁猛"
self.name = val
# pass
@username.deleter
def username(self):
# 如果发现有删除行为,可以在这个方法中拒绝删除
# pass
del self.name
obj = MyClass("小芳")
获取属性 (自动触发获取方法 @property)
print(obj.username())
print(obj.username)
设置属性 (自动触发设置方法) val形参自动接收设置的值
obj.username = "朴仁猛"
print(obj.username)
删除属性
del obj.username
print(obj.username) error
方法二
class MyClass():
def __init__(self,name):
self.name = name
# 获取
def get_username(self):
return self.name
# 设置
def set_username(self,val):
# val = "朴仁猛"
self.name = val
# 删除
def del_username(self):
# 如果发现有删除行为,可以在这个方法中拒绝删除
del self.name
# 顺序必须按照 获取 -> 设置 -> 删除 的参数进行传递
username = property(get_username,set_username,del_username)
obj = MyClass("朴飘乐")
# 获取
print(obj.username)
# 设置
obj.username = "朴一生"
print(obj.username)
# 删除
del obj.username
print(obj.username) #error 被删掉了