python学习笔记:面向对象三大特征(封装、继承、多态)

1、封装

说明:


  • 封装是面向对象编程第一步,将属性和方法封装到一个类中
  • 对封装的进阶理解就是属性的私有化
class Hero:
    position = "泉水"

    def __init__(self,name,sex,hp,attack):
        self.name = name
        self.sex = sex
        self.hp = hp
        self.attack = attack

    def info(self):
        print("我叫{},性别为{},血量为{},攻击力{}".format(self.name,self.sex,self.hp,self.attack))

    @classmethod
    def where_am_i(cls):
        print("我在{}".format(cls.postion))

    @staticmethod
    def haha():
        print("哈哈哈哈哈")


anqila = Hero("安琪拉","女",6000,1500)
print(anqila.position)
anqila.position="龙坑"
print(anqila.position)

运行代码可知,外部可以随便访问类属性并进行修改,非常不安全。由此我们将引入一个私有化的概念。

私有化:


  • 属性和方法都可以私有化,不让外部直接访问,可以提高数据的安全性,以后只暴露接口即可
  • 私有化的方法,在属性或方法前面加上双下划线即可"__"
  • 私有化后也可以考虑设置外部访问入口
class Hero:
    __position = "泉水"

    def __init__(self,name,sex,hp,attack):
        self.__name = __name
        self.sex = sex
        self.hp = hp
        self.attack = attack

    def info(self):
        print("我叫{},性别为{},血量为{},攻击力{}".format(self.name,self.sex,self.hp,self.attack))

    @classmethod
    def where_am_i(cls):
        print("我在{}".format(cls.postion))

    @classmethod
    def get_position(cls):
        return cls._position

    @classmethod
    def set_position(cls,position):
        cls._position = _position
        return cls._position

    @staticmethod
    def haha():
        print("哈哈哈哈哈")


anqila = Hero("安琪拉","女",6000,1500)

print(anqila.position)

print(get_position())

print(set_position("龙坑"))

anqila.name = "程咬金"

anqila.info()

把name私有化后,外部就不能修改了
 

2、继承

什么是继承?

class A:
    money = 10
    
    def study(self):
        print("学习好")

class B(A):
    pass

print(B.money)
b = B()

b.study()

说明:


  • 上述代码中A是父类,B是子类,A被B继承了
  • 继承就是子类拥有父类的所有属性和方法

继承的好处:相同的代码不需要重复编写

1.单继承
语法:
class 子类名(父类名):
    pass

如果继承的父类方法不合适,可以在子类重写父类方法

注意:私有化的属性和方法不会被继承

2.多继承:
语法:
class 子类名(父类名1,父类名2...):
    pass
示例代码:
class A:
    def eat(self):
        pass
    
class B:
    def sleep(self):
        pass

class C(A,B):
    pass

c=C()
c.eat()
c.sleep()

3、多态

不同对象调用同名方法,产生不同执行结果(以继承和重写父类方法为前提)

class Animal:
    def speak(self):
        print("鬼叫")

class Dog(Animal):
    def speak(self):
        print("汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵")

a = Animal()
b = Dog()
c = Cat()

def speak(x):
    x.speak()

speak(a)
speak(b)
speak(c)

作用:增加代码灵活度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值