一,,property,
property装饰器是用来将类内的函数属性伪装成数据属性
class People:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height
@property
def bmi(self):
return self.weight/(self.height**2)
obj = People('egon',80,180)
print(obj.bmi)
# 解释:bmi在类内定义的是函数,在用的时候已经被property装饰过的可以当作属性来用,用之前可以设置几个条件,不用加括号
class People:
def __init__(self,name):
self.__name=name
@property
def name(self):
return '<名字:%s>' %self.__name
@name.setter
def name(self,obj):
if type(obj) is not str:
print('name必须为str类型')
return
self.__name=obj
@name.deleter
def name(self):
# print('不让删')
del self.__name
obj=People('egon')
# 解释:bmi在类内定义的是函数,如果想在类外面对隐藏的变量进行更改时,如下:
@name.setting
def name(self,obj):
if type(obj) is not str:
print('name必须为str类型')
return
self.__name = obj
# 删除的时候
@name.deleter
def name(self):
del self.__name
二,
(一)绑定方法:绑定给谁就应该由谁来调用,谁来调用就会将谁当作第一个参数传入
# @classmethod :被它装饰的函数绑定给类
1,绑定给对象的方法:类中定义的函数默认就是绑定给对象的
2,绑定给类的方法:为类中定义的函数加上一个装饰器classmethod
(二)非绑定方法:既不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通的函数,没有自动传值的效果
@staticmethod:被它装饰的函数不用被传值
应用:
class MySql:
def __init__(self, ip, port):
self.id = self.create_id()
self.ip = ip
self.port = port
def tell_info(self):
print('<id:%s ip:%s port:%s>' % (self.id, self.ip, self.port))
@classmethod
def from_conf(cls):
return cls(ip, port)
@staticmethod
def create_id():
import uuid
return uuid.uuid4()
# obj1=MySql('1.1.1.1',3306)
# obj1.tell_info()
obj2 = MySql.from_conf()
obj2.tell_info()