python的入门学习-内置方法,继承方法,重写,多态super instance property&setter

目录

知识点1.内置方法

一.定义

知识点2.继承

1.语法要求

2.super().__init__()表示直接调用父类的__init__(self......参数)函数

3.多重继承

知识点3.方法重写

一.定义

二.多态

三.鸭子类型嘎嘎嘎嘎~

知识点4.super

一.默认

二.课本例题之114.30题

程序解释:

知识点5.instance&issubclass和type

知识点7.@property


知识点1.内置方法

一.定义

在类里面,__开头__结尾的方法

1.__init__ 

class student:
    def __init__(self,newname):
        self.name=newname
    def __str__(self):
        return f'{self.name}'
r=student('xiaoming')
print(r)

2.__str__

  1. 运行小规则:遇到print或者format输出对象时自动调用__str__方法
  2. 必须返回字符串
  3. 如果返回其中有元素非字符串,使用str转化为字符串
  4. 且在str内置方法中只有self一个属性
class complex:
    def __init__(self,real,image):
        self.real=real
        self.image=image
    def __str__(self):
        return self.real+'+'+self.image+'i'
if __name__=='__main__':
    c=complex('2.3','5.1')
    print(c)

>>2.3+5.1i

知识点2.继承

1.语法要求

  • class 子类类名(父类1,父类2.....)
  • 若没有继承任何父类,默认继承object
  • 支持多继承​
  • 定义子类时
  • 和前面的区别,在类名后面➕()

2.super().__init__()表示直接调用父类的__init__(self......参数)函数

1.子类可以直接继承父类所有的属性和方法!!!!

2.同时在子类可以增加父类不存在的方法或属性

class person:
    def setname(self,name):
        self.name=name
class student(person):
    def setsno(self,sno):
        self.sno=sno
class teacher(person):
    def settno(self,tno):
        self.tno=tno
class ta(student,teacher):
    def setteacher(self,teacher):
        self.teacher=teacher
if __name__=='__main__':
    stu=student()
    stu.setname('zhaghong')
    stu.setsno('123456')
    print(stu.name,stu.sno)
    ta=ta()
    ta.setname('mali')
    ta.setteacher('zhuzhu')
    ta.settno('123')
    print(ta.name,ta.teacher,ta.tno)

>>zhaghong 123456
mali zhuzhu 123

调用时:使用子类对象.父类/子类函数名

3.多重继承

含义:一个子类继承了多个父类

  • 一个父亲可以有多个孩子
  • 一个孩子也可以有多个父亲

知识点3.方法重写

一.定义

子类可以对从父类继承过来的方法重新定义

class person:
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def info(self):
        print(self.name,self.age)
class student(person):
    def __init__(self,name,age,number):
        self.number=number
        super().__init__(name,age)
class teacher(person):
    def __init__(self,name,age,address):
        super().__init__(name,age)
        self.address=address
stu1=student('xiaoming',30,'123456789')
stu1.info()
stu2=teacher('zhanghua',19,"dalian")
stu2.info()

大自然的搬运工super函数,是不可以在后面函数名的括号添加self函数的

二.多态

  • 一定要设一个函数fly() 则p和r可以作为参数传进去
  • 在调用函数时用类作为函数的参数 来调用对应类的方法
class plane:
    def fly(self):
        print("飞机在天空飞翔")
class rocket:
    def fly(self):
        print("火箭爆炸了")
def fly(obj):
    obj.fly()
p=plane()
r=rocket()
fly(p)
fly(r)

>>飞机在天空飞翔
火箭爆炸了

三.鸭子类型嘎嘎嘎嘎~

1.多态就是借助鸭子类型实现的!

2.如上图的plane和rocket类都有fly函数 故实例化后可调用fly函数以类名作为参数调用

知识点4.super

一.默认

supur默认情况下有两个参数(当前所在类名,self)

第一个参数:获取父类的对象类名

第二个参数:父类对象函数的第一个参数

二.课本例题之114.30题

程序解释:

实例化将张三传进person的类的init函数中,此时self.name等于张三,Per.display是调用person里面的display函数,最终第一行会输出张三
倒数第二行代码将78和李四赋值给init函数,init函数的第一行代码是去寻找student父类person的init函数,所以这时候李四的名字就赋给了self name,最后一行代码执行students的display函数display函数的第一行代码是去寻找student父类person的display函数输出李四的名字,所以第二行输出的是李四的名字,
接着是display的第二行代码是输self.sno所以第三行输出的是78

class person:
    def __init__(self,name):
        self.name=name
    def display(self):
        print(self.name)
class student(person):
    def __init__(self,sno,name):
        super().__init__(name)
        self.sno=sno
    def display(self):
        super(student,self).display()
        print(self.sno)
if __name__=="__main__":
    per=person('zhangsan')
    per.display()
    stu=student('78','lisi')
    stu.display()

知识点5.instance&issubclass和type

instance:判断对象所属的类是否是指定类

知识点6.类方法

  • @classmethod
  • 直接修改类属性
  • 传入第一个参数是cls(类)
  • 既可以通过类名调用,也可以通过实例对象调用

倒数第三行将一赋值给person.num,倒数第二行用类名调用gets name的类,从而返回的值1的值给r最后打印r

class person:
    def __init__(self,num):
        person.num=num
    @classmethod
    def getname(cls):
        return person.num
if __name__=='__main__':
    a=person(1)
    r=person.getname()
    print(r)

知识点7.@property

1.将类的属性访问和赋值转为方法调用

2.用@property定义获取属性值的方法gatter(只读属性)

3.设置属性值的方法setter

属性以方法形式展示出来,但引用的时候还是 类.方法名

改的时候也是类.方法名=xxx 只不过是同时在@property后面加上@方法名.setter

4.使用gatter和setter时要确保属性是私有的,不可随意更改 外界不能改,只有提高setter方法时才可修改

class book():
    def __init__(self,price):
        self._price=price#私有属性
    @property
    def price(self):
        return self._price#定义了一个获取值的函数
    @price.setter#更改时引入setter
    def name(self,price):
        if price>0:
            self._price=price
r=book(80)
print(r.price)
book.price=88#方法的外表,属性的内心
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值