python多态

本文探讨了Python中的多态性概念,包括类属性、类方法、静态方法和工厂类。多态允许不同对象对同一消息做出不同响应,Python通过在运行时确定对象类型来实现这一特性。文中还提到了单例模式,并指出Python的弱类型和解释性使得它在许多场景下体现出多态的特性,如内置函数len()的灵活应用。

多态:

类属性:属于类的成员,属于对象共有的

类方法:在方法上添加@classmethod

@classmethod

def class_method(cls):

可以通过类方法调用类属性,也可以通过对象调用类属性

静态方法:方法前加@staticmethod,静态方法没有参数,静态方法既和类没关系,也和对象没关系,也可以通过类和对象调用。

工厂类:有一些子类,在一个类中生成很多对象,简单工厂模式

pass

_new_(cls):#用来创建对象,而且必须要有返回值

return object._new_(cls)

可以用id(cls)看地址

当有属性时,需要在_new_()中也添加属性

单例:

#单例
class singleton:
    __instance=None
    def __new__(cls):
        if cls.__instance==None:
            cls.__instance==object.__new__(cls)
            return cls.__instance
        else:
            return cls.__instance
s=singleton()
ss=singleton()
print(id(s))
print(id(ss))

多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。

多态即多种形态,在运行时确定其状态,在编译阶段无法确定其类型,这就是多态。Python中的多态和Java以及C++中的多态有点不同,Python中的变量是弱类型的,在定义时不用指明其类型,它会根据需要在运行时确定变量的类型(个人觉得这也是多态的一种体现),并且Python本身是一种解释性语言,不进行预编译,因此它就只在运行时确定其状态,故也有人说Python是一种多态语言。在Python中很多地方都可以体现多态的特性,比如 内置函数len(object),len函数不仅可以计算字符串的长度,还可以计算列表、元组等对象中的数据个数,这里在运行时通过参数类型确定其具体的计算过程,正是多态的一种体现。有些朋友提出Python不支持多态,我是完全不赞同的.

Python以它这种独有的方式体现多态的根本原因我觉得有两点:1)Python是解释性语言;2)Python中变量是弱类型的。



Python 多态(Polymorphism)是面向对象编程中的一个重要概念,它允许同的对象对同一方法调用产生同的行为。在 Python 中,多态主要通过**方法重写(Method Overriding)**和**鸭子类型(Duck Typing)**来实现。 ### 1. **多态的实现方式** - **方法重写(继承多态)**:子类可以重写父类的方法,使得同的子类对象调用相同的方法时表现出同的行为。 - **鸭子类型(Duck Typing)**:Python 关心对象的类型,而是关注对象是否具有某个方法或行为。如果对象的行为符合预期,就可以调用对应的方法。 ### 2. **示例代码** ```python class Animal: def speak(self): pass class Dog(Animal): def speak(self): return "Woof!" class Cat(Animal): def speak(self): return "Meow!" def make_sound(animal): print(animal.speak()) # 同的对象调用相同的方法,产生同的行为 dog = Dog() cat = Cat() make_sound(dog) # 输出 "Woof!" make_sound(cat) # 输出 "Meow!" ``` **鸭子类型示例**: ```python class Duck: def quack(self): return "Quack!" class Person: def quack(self): return "I can quack like a duck!" def sound_maker(obj): print(obj.quack()) duck = Duck() person = Person() sound_maker(duck) # 输出 "Quack!" sound_maker(person) # 输出 "I can quack like a duck!" ``` ### 3. **Python 多态的特点** - 需要显式继承接口或抽象类。 - 动态语言特性使得多态更加灵活。 - 适用于任何具有相同方法的对象,即使它们没有继承关系。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值