美文网首页
2018-08-01 python学习—面向对象(私有化)

2018-08-01 python学习—面向对象(私有化)

作者: 随雪而世 | 来源:发表于2018-08-01 20:44 被阅读0次

python中类中的属性和方法的私有化:直接在属性名或者方法名前加(命名的以''开头)

属性或者方法私有:在外部不能直接使用, 可以在类的内部使用

class Person:
    # 私有的类字段
    __number = 61

    """人类"""
    def __init__(self, name='', age=0):
        self.name = name
        self.__age = age

    def show_age(self):
        print('%d' % (self.__age - 10))
        self.__run()

    # 私有的对象方法,只能在类的内部调用
    def __run(self):        #方法名前加_
        print('%s在跑' % self.name)

    # 私有的类方法
    @classmethod
    def __get_number(cls):
        print(cls.__number)


import random
class Student:
    def __init__(self, name):
        self.name = name
        self.study_id = ''


    def __creat_id(self):
        return 'py1805'+ str(random.randint(1, 50)).rjust(3, '0')

    def creat(self, name):
        stu = Student(name)
        stu.study_id = self.__creat_id()
        return stu

if __name__ == '__main__':
    p1 = Person('张三', 30)
    p1.name = '李四'
    # p1.age = 28   #_age
    # print(p1.name, p1.__age)
    p1.show_age()   #通过内部方法查看

    # print(Person.__number)  #无法取得

    # Person.__get_number()   

    # 私有化的原理:在内部在私有的名字前加了前缀'_类名'
    print(p1.__dict__['_Person__age'])

相关文章

网友评论

      本文标题:2018-08-01 python学习—面向对象(私有化)

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