标签:hid sel one 自动 demo 开发 自动调用 icm date
如下代码演示: import math class Circle: def __init__(self,radius): self.radius = radius def area(self): return math.pi*self.radius*self.radius def long(self): return 2*math.pi*self.radius long = property(long) #也可以在方法上加@property的方式实现,效果都是一样的 circle = Circle(5) print(circle.area()) print(circle.long) #注意:以上是经典类的访问方式,下面是新式类的访问方式,如下所示: # ############### 定义 ############### class Goods(object): @property def price(self): print(‘@property‘) @price.setter def price(self, value): print(‘@price.setter‘) @price.deleter def price(self): print(‘@price.deleter‘) # ############### 调用 ############### obj = Goods() obj.price # 自动执行 @property 修饰的 price 方法,并获取方法的返回值 obj.price = 123 # 自动执行 @price.setter 修饰的 price 方法,并将 123 赋值给方法的参数 del obj.price # 自动执行 @price.deleter 修饰的 price 方法
例子: class Foo: def get_bar(self): return ‘alex‘ # 必须两个参数 def set_bar(self, value): print("ada") return ‘set value‘ + value def del_bar(self): return ‘haoa‘ BAR=property(get_bar, set_bar, del_bar, ‘description...‘) obj = Foo() print(obj.BAR) # 自动调用第一个参数中定义的方法:get_bar obj.BAR = "alex" # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入 print(obj.BAR.__doc__) # 自动获取第四个参数中设置的值:description... del Foo.BAR # 自动调用第三个参数中定义的方法:del_bar方法
import time class Date: def __init__(self,year,month,day): self.year=year self.month=month self.day=day @staticmethod def now(): #用Date.now()的形式去产生实例,该实例用的是当前时间 t=time.localtime() #获取结构化的时间格式 return Date(t.tm_year,t.tm_mon,t.tm_mday) #新建实例并且返回 @staticmethod def tomorrow():#用Date.tomorrow()的形式去产生实例,该实例用的是明天的时间 t=time.localtime(time.time()+86400) return Date(t.tm_year,t.tm_mon,t.tm_mday) a=Date(‘1987‘,11,27) #自己定义时间 b=Date.now() #采用当前时间 c=Date.tomorrow() #采用明天的时间 print(a.year,a.month,a.day) print(b.year,b.month,b.day) print(c.year,c.month,c.day)
class Dog(object): def __init__(self,name): self.name = name @classmethod def eat(self): #注意:当在该方法上加了@classmethod之后就不应该有self了 print("%s is eating" % self.name) # d = Dog("ChenRonghua") d.eat() #上面代码会报错, class Dog(object): name = "张三" #name定义在这里是可以被访问的 def __init__(self,name): self.name = name @classmethod # def eat(self): print("%s is eating" % self.name) # d = Dog("ChenRonghua") d.eat()
class Foo(object): def __init__(self,name): self.name = name def __getitem__(self, key): print(‘__getitem__‘, key) print(self.__dict__) #self.key 这种方式会报错,因为传过来的是 k1,它会去当前对象的字典中去查找,直接这么self.k1是查不到的, # 需要通过self.__dict__.k1就可以查到了,注意:在字典中查东西要用中括号的形式! print(self.__dict__[key]) def __setitem__(self, key, value): print(‘__setitem__‘, key, value) self.__dict__[key] = value #设置新值 def __delitem__(self, key): print(‘__delitem__‘, key) self.__dict__.pop(key) obj = Foo("李四") result = obj[‘name‘] # 自动触发执行 __getitem__ obj[‘name‘] = ‘alex‘ # 自动触发执行 __setitem__ result = obj[‘name‘] # 自动触发执行 __getitem__ del obj[‘name‘]
那么,创建类就可以有两种方式: 1.普通方式 class Foo(object): def func(self): print(‘hello alex‘) 2.特殊方式 Demo01: def func(self): print(‘hello wupeiqi‘) Foo = type(‘Foo‘, (object,), {‘func‘: func}) Foo.func(Foo()) # type第一个参数:类名 # type第二个参数:当前类的基类 # type第三个参数:类的成员 Demo02: def func(self): print("hello %s"%self.name) def __init__(self,name,age): self.name = name self.age = age Foo = type(‘Foo‘,(object,),{‘func‘:func,‘__init__‘:__init__}) f = Foo("jack",22) f.func()
标签:hid sel one 自动 demo 开发 自动调用 icm date
原文地址:http://www.cnblogs.com/python-machine/p/6846046.html