标签:def 通过 黄色 结果 私有方法 派生类 __init__ 外部 super
格式:双下划线+变量名/方法名,变量分为静态变量和动态变量
私有变量和方法只能在本类中的方法内调用,不能在类以外调用
私有变量和方法也不能通过类来继承,不能通过子类调用
如果希望通过对象直接调用私有变量和方法,可以使用**obj._类名__变量名/方法名**来调用,但是这种方法是python3的一个bug,工作中不能使用。
class Person(object):
skin_color = '黄色'
__num = 'one'
# __变量名表示的是私有的静态字段
def __init__(self, name, age, gender):
self.name = name
self.age = age
self.__gender = gender
def func(self):
print(self.__num)
print(Person.__num)
# 类名也可以直接调用私有静态字段
def __func(self):
print("这是一个私有方法")
def func1(self):
self.__func()
# 在本类内部中的其他方法里可以调用私有方法
# 在本类中调用的时候用self.静态变量/方法来调用
def func2(self):
print(self.__gender)
p1 = Person('王慧', 20, '女')
print(p1.skin_color)
# print(p1.__num)
# 实例化对象不能调用私有静态字段
# print(Person.__num)
# 类名也不能调用私有静态字段
p1.func()
# 类的内部可以正常调用私有静态字段
class Son(Person):
def __init__(self, name, age, gender, hobby):
super().__init__(name, age, gender)
self.hobby = hobby
def func5(self):
# print(self.__gender)
print(self.name)
# 子类中不能调用父类中的私有动态变量
s1 = Son('理智', 20, '女', '篮球')
print(s1.skin_color)
# print(s1.__num)
# 子类、派生类均不可调用父类的私有静态字段
# 总结:私有静态变量只能在本类内调用,不能在本类外或者子类、派生类中调用
# p1.__func()
# 私有方法不能在外部调用
p1.func1()
# 只能在本类中其他的方法里使用
s1.func1()
# 类的派生和子类也不能调用私有的方法
p1.func2()
s1.func5()
p1._Person__func()
# 通过对象直接调用私有方法或者私有变量,需要使用obj._类名__私有方法/变量,但这种方法在工作中不能使用
# 这是python的一个bug
class Parent(object):
def __func(self):
print("in parent func")
def __init__(self):
self.__func()
class Son(Parent):
def __func(self):
print("in Son func")
son1 = Son()
class Parent(object):
def func(self):
print("in parent func")
def __init__(self):
self.8func()
class Son(Parent):
def func(self):
print("in Son func")
son1 = Son()
'''
结果是:
黄色
one
one
黄色
这是一个私有方法
这是一个私有方法
女
理智
这是一个私有方法
in parent func
in Son func
'''
标签:def 通过 黄色 结果 私有方法 派生类 __init__ 外部 super
原文地址:https://www.cnblogs.com/ddzc/p/12254588.html