Python私有属性练习

'''
单下划线、双下划线、头尾双下划线说明:

__foo__: 定义的是特殊方法,一般是系统定义名字 ,类似 __init__() 之类的。

_foo: 以单下划线开头的表示的是 protected 类型的变量,即保护类型只能允许其本身与子类进行访问。(约定成俗,不限语法)

__foo: 双下划线的表示的是私有类型(private)的变量, 只能是允许这个类本身进行访问了。
==============================================================
class Person(object):

def __init__(self, name, age):
# self.name = name
self.__name = name # __name即私有属性,设置 _Person__name = ”yuan“
self.__age = age

def foo(self):
print("姓名:", self.__name) # self._Person__name

def get_name(self): #查看私有属性name方法
return self.__name

def set_name(self, new_name): #修改私有属性name方法
self.__name = new_name

def set_age(self, new_age):#修改私有属性age方法
if new_age < 200:
self.__age = new_age
raise Exception("年龄不能超过两百岁!")

def get_age(self): #查看私有属性name方法
print(self.__age)


#p1 = Person("rain", 22)
#p1.foo() # 姓名: rain
#print(dir(p1)) # ['_Person__age', '_Person__name', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'foo', 'get_age', 'get_name', 'set_age', 'set_name']

#ret = p1.get_name()
#print(ret) # rain
#p1.set_name("rains")
#print(p1.get_name()) # rains

#p1.age = 10000
#p1.get_age() # 22
#p1.set_age(1560)
#p1.get_age() # Exception: 年龄不能超过两百岁!


######################################################

class Person(object):

def __init__(self, name, age):
# self.name = name
self.__name = name # __name即私有属性,设置 _Person__name = ”yuan“
self.age = age
self._score = 100

def get_name(self):
print(self.__name)


class Teacher(Person):

def get_age(self):
print(self.age)
print(self._score)


yuan = Teacher("xi", 22)
# print(dir(yuan))
yuan.get_name() # xi

'''
posted @ 2022-04-18 21:44  呼长喜  阅读(43)  评论(0编辑  收藏  举报