标签:course 方法 collect ble 变化 init style mon row
隐藏对象的属性和实现细节,仅对外提供公共访问方式。
在python中用下划线开头的方式,将属性隐藏起来(设置成私有)即封装
class Person:
def __init__(self,height,weight,name,sex):
self.__height = height # 私有属性:外部不能调用
self.weight = weight
self.name = name
self.sex = sex
def tell_bmi(self):
return self.weight / self.__height ** 2
def tell_height(self): # 建议这样查看值,用户不可以直接修改
return self.__height
def set_height(self,new_height): # 建议这样修改值,即安全又人性化
self.__height = new_height if new_height > 20 else self.__height
return self.__height # return不能返回赋值语句
dennis = Person(1.75,120,‘dennis‘,‘man‘)
print(dennis.tell_bmi())
print(dennis.__dict__)
print(dennis._Person__height)
print(dennis.tell_height())
print(dennis.set_height(-123)) # 设置不成功
# 私有属性:
# 在本类中就可以正常使用
# 在本类外就必须_类名__属性名调用(不建议使用)
class Goods:
__price = 3 ### 私有公共属性
def __init__(self,name,num):
self.name = name
self.num = num
def goods_price(self):
return self.num * Goods.__price
banana = Goods(‘egon‘,2)
print(banana.goods_price())
print(Goods.__dict__)
print(Goods._Goods__price)
class Foo:
def __init__(self,height,weight):
self.height = height
self.weight = weight
def tell_bmi(self):
return self.weight / self.__height_pow()
def __height_pow(self): # 私有方法
return self.height ** 2
dennis = Foo(1.7,125)
print(dennis.tell_bmi())
print(dennis._Foo__height_pow()) # 不建议
property 把类中一个方法变成了一个方法去实现
@property 实现了只读
@property x.setter 实现了可读可写(x.setter依赖@property,x为被装饰方法的方法名)
class Goods:
__discount = 0.8 # 类的私有属性
def __init__(self,name,price):
self.name = name
self.__price = price
@property # 只读
def price(self):
return self.__price * Goods.__discount
@price.setter # 可写
def price(self,new_price):
self.__price = new_price
@price.deleter
def price(self):
del self.__price # 只能删除self赋值的命名
# del self.name
print(‘在执行删除操作啦!‘)
apple = Goods(‘apple‘,20)
print(apple.price)
apple.price = 40
print(apple.price)
del apple.price # 删除会执行price.deleter里的
# print(apple.price) # 因为删掉了__price,所以再次print会报错
from collections import namedtuple
Course = namedtuple(‘Course‘,[‘price‘,‘period‘,‘name‘])
python = Course(20000,‘6 months‘,‘python‘)
print(python.name)
标签:course 方法 collect ble 变化 init style mon row
原文地址:http://www.cnblogs.com/8192bit/p/7366713.html