Python:面向对象之继承与私有属性

继承的优先顺

# C类继承了A,和B两个父类,父类中有同名方法foo,那么会优先调用哪个父类中的foo方法呢?
# => 按继承的先后顺序调用
# 类名.__mro__ => 利用mro类属性可以查看方法的调用顺序

class A(object):
    def foo(self):
        print('我是A类的foo方法')

class B(object):
    def foo(self):
        print('我是B类的foo方法')

class C(A,B):
    pass

c = C()
c.foo()
print(C.__mro__)
print(dir(C()))

私有属性,私有方法的获取

# 获取私有属性,私有方法的继承
# 对象._父类名_私有属性名
# 对象._父类名_私有方法名()
class Person(object):
    def __init__(self,name,age,__money):
        self.name = name
        self.age = age
        self.__money = __money

    def __run(self):
        print(self.name,'正在跑步')

class D(Person):
    def __demo(self):
        print('我是demo里的私有方法')

d = D('张三',15,1)

#print(d.__money) # 报错:'D' object has no attribute '__money'
print(d._Person__money) # 1
d._Person__run() # 张三 正在跑步

用(get / set)方法(获取 / 修改)私有属性

# 通过get,set方法获取,修改私有属性
class Student(object):
    def __init__(self,name,age,__city):
        self.name = name
        self.age = age
        self.__city = __city

    def get_city(self):
        return self.__city

    def set_city(self,item):
        self.__city = item


s = Student('赵四',18,'上海')
print(s.get_city()) # 上海
s.set_city('南京')
print(s.get_city()) # 南京

猜你喜欢

转载自blog.csdn.net/weixin_42161670/article/details/113389533