Python修改私有变量、统计访问次数、华摄氏度转换

Python笔记Day7

如果要让内部属性不被外部访问,可以把属性的名称前加上两个下划线__,在Python中,
实例的变量名如果以__开头,就变成了一个私有变量(private),只有内部可以访问,外部不能访问

class Student(object):

def __init__(self, name, score):
    self.__name = name
    self.__score = score

def print_score(self):
    print('%s: %s' % (self.__name, self.__score))

但是如果外部代码要获取name和score怎么办?可以给Student类增加get_name和get_score这样的方法:

class Student(object):
...

def get_name(self):
    return self.__name

def get_score(self):
    return self.__score

按照约定俗成的规定,当你看到这样的变量时,意思就是,“虽然我可以被访问,但是,请把我视为私有变量,不要随意访问:(_name)

不能直接访问__name是因为Python解释器对外把__name变量改成了_Student__name,所以,仍然可以通过_Student__name来访问__name变量

如果又要允许外部代码修改score怎么办?可以再给Student类增加set_score方法:

class Student(object):
...

def set_score(self, score):
    self.__score = score

错误做法:

>>> bart = Student('Bart Simpson', 59)
>>> bart.get_name()
'Bart Simpson'
>>> bart.__name = 'New Name' # 设置__name变量!
>>> bart.__name
'New Name'

新增了__name变量,系统将__name 变成原来的__name变量没有改变

我们自己写的类,如果也想用len(myObj)的话,就自己写一个__len__()方法

>>> class MyDog(object):
...     def __len__(self):
...         return 100
...
>>> dog = MyDog()
>>> len(dog)
100

当实例对象做P[key]运算时,就会调用类中的__getitem__()方法。

#统计访问次数

class countlist:
def __init__ (self,*args):
    self.values = [x for x in args]
    self.count = {}.fromkeys(range(len(self.values)),0)

def __len__(self):
    return len(self.values)

def __getitem__(self,key):
    self.count[key] += 1
    return self.values[key]

华摄氏度转换:

class celsius:
def __init__(self,value = 26.0):
    self.value = float(value)

def __get__(self,instance,owner):
    return self.value

def __set__(self,instance,value):
    self.value = float(value)

class fahrenheit:
def __get__(self,instance,owner):
    return instance.cel * 1.8 +32

def __set__(self,instance,value):
    instance.cel = (float(value)-32)/1.8
    
class temperature:
cel = celsius()
fah = fahrenheit()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值