私有属性,外部无法访问.无法直接被调用. 此时想访问私有的属性---@property以...">
美文网首页
(十二)类<5>封装

(十二)类<5>封装

作者: 费云帆 | 来源:发表于2019-01-18 11:37 被阅读0次

1."__var"--->私有属性,外部无法访问.无法直接被调用.

class ProtectMe:
    def __init__(self):
        self.me='qiwsir'
        self.__name='kivi'

    def __python(self):
        print("I love python.")
    def code(self):
        print("Which language do you like?")
        self.__python()
if __name__=='__main__':
    p=ProtectMe()
    #print(p.me)# qiwsir
    # 无法调用私有的属性
    #print(p.__name)# AttributeError
    # 类内部,利用普通的方法去调用私有的方法,结果正确
    p.code() # Which language do you like?I love python.
    # 无法访问私有的方法
    p.__python()# AttributeError
  • 此时想访问私有的属性---@property
    以后看到"@"这种"语法糖",纯粹是为语法服务的,不必太过惊奇.
class ProtectMe:
    def __init__(self):
        self.me='qiwsir'
        self.__name='kivi'
     # 表示属性
    @property
    def name(self):
        return self.__name
if __name__=='__main__':
    p=ProtectMe()
    # 访问的方法,感觉是调用name函数对象的属性
    print(p.name) # 用属性的方式去访问
  • 另一种方法,不使用@property
class ProtectMe:
    def __init__(self):
        self.me='qiwsir'
        self.__name='kivi'

    # 仍然使用类的方法去返回
    def getname(self):
        return self.__name
if __name__=='__main__':
    p=ProtectMe()
    # 调用这个函数(上面的例子是用访问属性的形式调用的)
    print(p.getname())
>>>
kivi

2.定制类---一些特殊的方法,开头结尾都是双下划线,类会自动调用该方法,无须手动

class Studentc:

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

    """def __str__(self):
        return "Student object (name:{})".format(self.__name)"""

print(Studentc('cc'))
>>>
# 无法显示内容"cc"
<__main__.Studentc object at 0x0000000003108B38>
  • 进阶
class Studentc:

    def __init__(self,name):
        self.__name=name
    # 类自动调用该方法
    def __str__(self):
        return "Student object (name:{})".format(self.__name)
    #加不加这句这里是一样的
    #属性赋值,我是这么理解
    #__repr__ = __str__
print(Studentc('cc'))
>>>
Student object (name:cc)
  • 别人的实例:关于
__len__

如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。

要让 len() 函数工作正常,类必须提供一个特殊方法len(),它返回元素的个数。

例如,我们写一个 Students 类,把名字传进去:

class Students(object):
    def __init__(self, *args):
        self.names = args
    def __len__(self):
        return len(self.names)

只要正确实现了len()方法,就可以用len()函数返回Students实例的“长度”:

>>> ss = Students('Bob', 'Alice', 'Tim')
>>> print len(ss)
3```

上面如果把特殊的len()注释掉,就会提示:
Traceback (most recent call last):
  File "C:\Users\wcw\Desktop\Testing.py", line 10, in <module>
    print(len(ss))
TypeError: object of type 'Student' has no len()

相关文章

网友评论

      本文标题:(十二)类<5>封装

      本文链接:https://www.haomeiwen.com/subject/uqzgdqtx.html