【 Python学习笔记】(四)面向对象

类与对象

定义

class Person:
    def __init__(self,name,height):#构造函数
        self.name=name#公有属性
        self.__age=None#双下划线标识私有属性
        self.__height=height

    def set_age(self,age):
        if not isinstance(age,int) or age<=0:
            print('输入年龄必须是大于0的自然数!')
            return False
        self.__age=age

    def print_Person(self):#共有函数
        print('姓名',self.name)
        print('年龄',self.__age)
        print('身高',self.__height)

person1=Person('WYF',176)
person1.set_age(-1)
person1.print_Person()

isinstance函数:如果可实例化对象的类型与参数二的类型相同则返回 True,否则返回 False。

继承和多态

class Animal:
    def __init__(self,name):
        self.name=name
    def say(self):
        print('Animal')
    def print_Animal(self):
        print('名字是:',self.name)

class Dog(Animal):#类继承
    def __init__(self):#子类定义构造,不会自动调用父类构造
        super(Dog,self).__init__('旺财')
    def say(self):
        print('Dog')
    
class Cat(Animal):
    def say(self):
        print('Cat')

dog=Dog()
dog.print_Animal()

print(isinstance(dog,Dog))#判断实例是不是某个对象,True
print(isinstance(dog,Animal))#True

def animal_say(animal:Animal):#只要参数是Animal或者其子类即可调用
    animal.say()

dog=Dog()
cat=Cat()

animal_say(dog)#Dog
animal_say(cat)#Cat

super() 函数是用于调用父类(超类)的一个方法。

关于super()函数解释不错

这里学到了两个很有意思的名词,鸭子类型猴子补丁。但我觉得,不掌握这两个名字也没什么,就是给大家都知道的方法起了个新名字。
鸭子类型🦆(duck type)是对Python中数据类型本质上是由属性和行为来定义的一种解读。
猴子补丁🐒(monkey patching)是对Python中类和模块可以在外部被动态修改这种特性的一个比喻。

你知道什么是Python里的鸭子类型和猴子补丁吗?

绑定类

类变量

class Animal:
    name="动物"#类变量

    def __init__(self,age):
        self.age=age#实例变量

#使用
print(Animal.name)#类变量不需要实例化就可以使用
dog=Animal(18)
print(dog.age)
Animal.name="狗"
print(dog.name)#类变量可以在实例中被调用

静态方法与类方法
静态方法既不绑定类也不绑定实例,类方法绑定类

class Animal:
    name="动物"#类变量

    @staticmethod#装饰器语法
    def play():
        print('playing')#静态方法无参数,不能调用成员变量和方法

    @classmethod
    def play2(cls):#指向定义的类本身,可以读取和修改类变量
        print(cls.name,'playing')

print(Animal.name)
Animal.play()
Animal.play2()

装饰器语法,在这里看起来就是一个标志,和之前的static int,const int很类似

此处应当复习下 C++ static、const 和 static const 类型成员变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值