Python的语法学习笔记

1.Python的重载

与C语言不同,其实在Python中是没有函数重载的,也即函数不可同名。但当我们查看某些内置类的定义时(如何dict类),会发现有许多同名函数的存在,只不过上述加了@overload的装饰器

具体用法是:

from typing import overload

@overload
def repeat(a:int,b:int):
    print(1)  
     
@overload
def repeat(a:int,b:str):
    print(2)

def repeat(a:float,b:float):
    print(3)
    
repeat(3.3,5.0)                                    #python的重载其实是一种假的重载

也即@overload只是起到一个类似于注释,给读者选择的作用,真正起作用的函数是上面没有被@overload装饰的,也即需要调用那种,就去除它上面的@overload

2.继承中super().的使用

在python,使用super().函数名(形参,不用加self),可以在类中调用父类的函数。在子类中执行父类函数时,里面的self全部自动转化为子类。

class Animal1():
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def greet(self):
        print("ni hao 1")

    def fun(self):
        self.age=10


class Dog(Animal1):
    def __init__(self,name,age,sex):
        super().__init__(name,age)                    #这种方法就不用再传self了。
        self.sex=sex
    def greet(self):
        print("ni hao")
        super().greet()
    
    def fun(self):                                    #一般就是在子类方法中调用父类方法
        super().fun()

这种用法一般发生在父类函数被子类同名函数重写后,又还希望调用父类的函数,最常见的例子就是子类初始化时,可以省略写原本父类一已经定义好的那一部分属性,因此直接用super调用父类的初始化函数。

class Parent1:
    def greet(self):
        print("Hello from Parent1")
    

class Parent2:
    def greet(self):
        print("Hi from Parent2")
    def sage(self,a):
        self.age=a

class Child(Parent1, Parent2):
    def __init__(self):
        self.age=10

    def greet(self):
        Parent1.greet(self)
        Parent2.greet(self)
    def sage(self,a):
        Parent2.sage(self,a)

print(Child.__mro__)                                           #查看调用继承的解析顺序
child=Child()
print(child.age)
child.sage(5)
print(child.age)                                               #类的属性名和方法名不要起的一样

在python3中,一般类中直接用父类名.方法名(self,..)调用父类的方法,不用super的方式了,super的方式一般就init用一下,但注意如果多继承它只继承第一个,这个顺序一定要在刚开始定义类就得写好。(用__mro__可以查看类的继承顺序)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值