python基础_029__面向对象高级-私有方法属性--多继承

 1、私有属性和私有方法

1、 私有属性与私有方法不能从外部被调用,也不会被子类继承
2、在属性或方法的前面加上__,就变成了私有属性或私有方法,如果前后都有__,不是私有属性或私有方法
3、  私有属性和私有方法,实例对象直接调用会报错只有当前类自己才可以使用
class ClsstestA:
    __str1 = 'ABC'
    str2 = 'DEF'

    def __init__(self):
        pass

    def __method1(self):
        print('这是一个私有方法')

    def method2(self):
        print(self.__str1)  # 调用私有属性
        self.__method1()  # 调用私有方法


cls1 = ClsstestA()
cls1.method2()


# 输出结果:
# ABC
# 这是一个私有方法
# print(cls1.__str1)  # 私有属性,实例对象直接调用会报错
# print(cls1.__method1())  #私有方法,实例对象直接调用会报错

2、object类

# 所有的类都是object的子类,一个类无论是否声明继承object,实际都继承object类
class Class2:
    """
    这是类的注释
    """


# Class2继承了object,所以可以直接使用object里提供的属性或方法
print(Class2.__dict__)  # 显示类的属性 # 输出结果:返回了一个查看对象内部所有属性名和属性值组成的字典
print(Class2.__doc__)  # 显示类的注释  # 输出结果:这是类的注释
print(Class2.__base__)  # 显示第一继承父类的名称  # 输出结果:<class 'object'>
print(Class2.__bases__)  # 显示所有父类,爷类,祖宗十八代类的名称  # 输出结果:(<class 'object'>,)
print(Class2.__name__)  # 显示类的名称   # 输出结果:Class2


 3、多继承,一个类可以有多个父类


1、 继承多个父类时,用逗号隔开
2、 继承的多个父类中有同名方法时,按照继承顺序考前的父类中的同名方法进行调用

class Money1:
    def money(self):
        print('一个亿')


class Money2:
    def money(self):
        print('两个亿')

    def countmoney(self):
        print('我有很多钱')


class Human(Money1, Money2):  # 继承多个父类时,用逗号隔开,多个父类中有同名方法时,按照继承顺序进行调用
    pass


man = Human()

man.money()  # 输出结果:一个亿
man.countmoney()  # 输出结果:我有很多钱


4、多态


1、面向对象的3大特征,封装,继承,多态
 2、代码中:def animal_say(obj):中的obj作为形参时
3、当object作为参数传值时,你可以用任意类型作为参数传进去,这个体现了多态的性质。不管是int类型还是str类型或者是自己自定义的类型的对象都可以作为参数传进去。
class Dog:
    def say(self):
        print('汪汪汪')


class Cat:
    def say(self):
        print('喵喵喵')


#  当object作为参数传值时,你可以用任意类型作为参数传进去,这个体现了多态的性质。不管是int类型还是str类型或者是自己自定义的类型的对象都可以作为参数传进去。
def animal_say(obj):
    obj.say()


dog = Dog()  # 狗的实例
cat = Cat()  # 猫的实例
animal_say(cat)  # 传猫的对象,想让猫叫
# 输出结果:喵喵喵
animal_say(dog)  # 传狗的对象,想让狗叫


# 输出结果:汪汪汪


# 练习:写一个三角形的类
class Sanjiaoxing:
    def __init__(self, a, b, c):
        self.a = a
        self.b = b
        self.c = c

    def zhouchang(self):
        if self.a + self.b <= self.c or self.a + self.c <= self.b or self.b + self.c <= self.a:
            return '无法构成三角形,忽略周长'
        else:
            return self.a + self.b + self.c

    def mianji(self):
        if self.a + self.b <= self.c or self.a + self.c <= self.b or self.b + self.c <= self.a:
            return '无法构成三角形,忽略面积'
        else:
            p = (self.a + self.b + self.c) / 2
            return (p * (p - self.a) * (p - self.b) * (p - self.c)) ** 0.5


sjx = Sanjiaoxing(3, 4, 5)
print(sjx.zhouchang())
# 输出结果:12
print(sjx.mianji())
# 输出结果:6.0
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值