您的位置:首页 > 编程语言 > Python开发

python面向对象(二)——类成员

2016-04-11 11:19 591 查看

Python面向对象 类成员





1、字段

普通字段 属于对象
静态字段 属于类

2、方法

普通方法

触发者是对象 括号里至少一个参数 self = 当前对象 ,可以有多个参数

类方法

@classmethod (cls=当前类) 触发者是类,用类直接调用,括号里只能有一个参数cls

对静态方法的约束,只能有一个参数,参数在传值的时候自动把当前类传入。单例模式时用到。

静态方法

属于类 @staticmethod 触发者类,括号里不需要参数(),也可以有多个参数

类加上静态方法=一个函数 。创建对象就可以访问方法,就像创建了函数。如果程序全部要求用面向对象做,而不用函数,静态方法才有用。

为什么要有类方法和静态方法?
因为如果没有这两种方法,在调用时就会先创建对象在去调用方法。而这两种方法都可以直接通过类来调用,节省的内存。

class foo():
def func(self):
print "This is common method"

@classmethod                    #类方法
def class_func(cls):                #参数为cls
print "This is class method!!!"

@staticmethod              #静态方法
def static_method():
print "This is static method!!"

obj = foo()
obj.func()    #用对象直接调用普通方法
foo.class_func()    #通过类来直接调用类方法
foo.static_method()   #通过类来直接调用静态方法


  

3、属性

属性把一个方法伪造成一个字段、一个属性,像字段那样的属性而不是一个功能

定义时,在普通方法的基础上添加 @property 装饰器;

定义时,属性仅有一个self参数

调用时,无需括号
普通方法:foo_obj.func()
属性方法:foo_obj.prop


属性的两种定义方式

装饰器 即:在方法上应用装饰器

静态字段 即:在类中定义值为property对象的静态字段

[b]  [b][b]装饰器方式:在类的普通方法上应用@property装饰器[/b][/b][/b]

经典类,具有一种@property装饰器(如上一步实例)

# ############### 定义 ###############
class Goods:
@property
def price(self):
return"wupeiqi"
# ############### 调用 ###############
obj = Goods()
result = obj.price  # 自动执行 @property 修饰的 price 方法,并获取方法的返回值


新式类,具有三种@property装饰器

# ############### 定义 ###############
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 Goods(object):

def__init__(self):
# 原价
self.original_price = 100
# 折扣
self.discount = 0.8

@property
def price(self):
# 实际价格 = 原价 * 折扣
new_price = self.original_price * self.discount
return new_price

@price.setter
def price(self, value):
self.original_price = value

@price.deltter
def price(self, value):
del self.original_price

obj = Goods()
obj.price         # 获取商品价格
obj.price = 200   # 修改商品原价
del obj.price     # 删除商品原价


[b]  静态字段方式,创建值为property对象的静态字段[/b]
[b]    当使用静态字段的方式创建属性时,经典类和新式类无区别[/b]

class Foo:

def get_bar(self):
return 'wupeiqi'

BAR = property(get_bar)

obj = Foo()
reuslt = obj.BAR        # 自动调用get_bar方法,并获取方法的返回值
print reuslt


[b]  property的构造方法中有个四个参数
[/b]


第一个参数是方法名,调用
对象.属性
时自动触发执行方法


第二个参数是方法名,调用
对象.属性 = XXX
时自动触发执行方法


第三个参数是方法名,调用
del 对象.属性
时自动触发执行方法


第四个参数是字符串,调用
对象.属性.__doc__
,此参数是该属性的描述信息


class Foo:

def get_bar(self):
return'wupeiqi'
# *必须两个参数
def set_bar(self, value):
return 'set value' + value

def del_bar(self):
return'wupeiqi'

BAR = property(get_bar, set_bar, del_bar, 'description...')

obj = Foo()

obj.BAR              # 自动调用第一个参数中定义的方法:get_bar
obj.BAR = "alex"     # 自动调用第二个参数中定义的方法:set_bar方法,并将“alex”当作参数传入
del Foo.BAR          # 自动调用第三个参数中定义的方法:del_bar方法
obj.BAE.__doc__      # 自动获取第四个参数中设置的值:description...


  由于静态字段方式创建属性具有三种访问方式,我们可以根据他们几个属性的访问特点,分别将三个方法定义为对同一个属性:获取、修改、删除

class Goods(object):

def__init__(self):
# 原价
self.original_price = 100
# 折扣
self.discount = 0.8

def get_price(self):
# 实际价格 = 原价 * 折扣
new_price = self.original_price * self.discount
return new_price

def set_price(self, value):
self.original_price = value

def del_price(self, value):
del self.original_price

PRICE = property(get_price, set_price, del_price, '价格属性描述...')

obj = Goods()
obj.PRICE         # 获取商品价格
obj.PRICE = 200   # 修改商品原价
del obj.PRICE     # 删除商品原价


  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: