2024年Python最新python之类的封装,继承,多态

a,设置私有属性和方法

在属性名和方法名前面加两个下划线__

定义为私有属性和私有方法,不能被子类继承

# 1.私有化属性

__name:str

__age:int

b,获取和修改私有属性的值

获取,定义getXXX()

修改,定义setXX()

#2,提供get/set

def get_name(self):

return self.\_\_name

def set_name(self,name:str):

return self.\_\_name

4,方法


①类方法

用装饰器@classmethod标识

@classmethod

def test(cls):

cls.\_\_name='xxx'

②静态方法

用装饰器@staticmethod标识

@staticmethod

def say():

print("hello")

5,魔法方法


①__XX__()函数叫做魔法方法,指的是具有特殊功能的函数

def __str__(self):

return f"名字{self.\_\_name},年龄{self.\_\_age}"

②__init__()

a,__init__():初始化对象

在创建一个对象时默认被调用,不需要手动调用

# 构造函数

def __int__(self):

pass

b,带参数的__init__()方法

# 构造函数

def __init__(self,name:str=“”,age:int=0):#这里的str与int只是需要的类型,给其他类型也不会报错

self.\_\_name=name
self.\_\_age=age

③__str__() --------- 类似Java语言中的toString()方法

a,print输出对象时,默认打印的是对象在内存中的地址

b,如果类中定义__str__方法,则会打印__str__方法中的内容

class Student:

# 1.私有化属性
\_\_name:str
\_\_age:int
def \_\_str\_\_(self):
    return f"名字{self.\_\_name},年龄{self.\_\_age}"

二,继承

====

1,单继承


父类,class 父类(object):

class Parent(object):

name='张三 '
def cook(self):
    print("正在煮饭\[辣椒炒肉\]")

子类,class 子类(父类):

class Mother(object):

def cook(self):
    print("正在煮饭\[红烧肉\]")

2,多继承


子类,class 子类(父类1,父类2)

class Parent(object):

name='张三 '
def cook(self):
    print("正在煮饭\[辣椒炒肉\]")

class Mother(object):

def cook(self):
    print("正在煮饭\[红烧肉\]")

class Son(Mother,Parent):

def cook\_test(self):
    super(Son,self).cook()
    print("正在煮饭\[茄子豆角\]")

注意,如果一个类继承多个父类,优先继承父类1的同名属性和方法

3,查看一个类的继承关系


类.__mro__

①    print(Parent.mro())

②    print(Son.__mro__)

4,子类重写父类的同名属性和方法


class Cs():

def cook(self):
    pass

class Parent(Cs):

def cook(self):
    print("正在煮饭\[辣椒炒肉\]")

class Mother(Cs):

def cook(self):
    print("正在煮饭\[红烧肉\]")

Parent,Mother重写了Cs的重名属性和方法

注意,如果子类重写了父类的同名属性和方法,则会调用子类中的同名属性和方法

5,子类调用父类的同名属性和方法


在子类的同名方法中调用,语法:父类类名.方法(self)

super(),调用父类方法,super().方法()

(适用于 单继承)

三,多态

====

1,概念


多态是一种使用对象的方式,子类重写父类方法,调用不同子类对象的相同父类方法,可以产生不同的执行效果

2,步骤


a,定义父类,提供父类方法

b,定义子类,重写父类方法

c,传递子类对象给调用者,返回不同的结果

四,完整代码如下

========

面向对象的语言

#定义类

Java class Person{ }

python 首字母需要大写

class Student:

name=‘小宝’

sex:str

age=20

def say(self):

self这个参数是当前这个对象,不需要自己传参

可以通过self去取得自身携带的一些东西,如属性

print(“hello”,self)

实例化

java new Student()

python

s=Student()

s2=Student()

#打印s 肯定是内存地址

print(s)

s.say()

name 实例属性

s.name=“张三”#添加了一个实例属性name 值是张三

Student.name=“haha”#修改了类属性

s有几个name属性? 【name类属性】【name实例属性】

del s.name #删除了name实例属性

s.birth=‘2021-1-1’#不会报错,python是弱类型,对变量没有类型限制,对对象没有属性限制

print(s.name)

print(s2.name)

class Student:

1.私有化属性

__name:str

__age:int

构造函数

def int(self):

pass

构造函数

def init(self,name:str=“”,age:int=0):#这里的str与int只是需要的类型,给其他类型也不会报错

self.__name=name

self.__age=age

#2,提供get/set

def get_name(self):

return self.__name

def set_name(self,name:str):

return self.__name

def str(self):

return f"名字{self.__name},年龄{self.__age}"

def set_name(self, owner, name):

@staticmethod

def say():

print(“hello”)

@classmethod

def test(cls):

cls.__name=‘xxx’

Student.test()

s1=Student(“小宝”,20)

s2=Student()

s3=Student(name=“小黑”)

s4=Student(age=21)

print(s.get_name())

print(s1)

print(s2)

print(s3)

print(s4)

Student.say()

import random

java类都直接或者间接继承object

python类都直接或者间接继承object

如果属性或方法已经冲突,拿前面的

class Parent(object):

name='张三 ’

def cook(self):

print(“正在煮饭[辣椒炒肉]”)

class Mother(object):

def cook(self):

print(“正在煮饭[红烧肉]”)

class Son(Mother,Parent):

pass

class Son(Parent,Mother):

pass

class Son(Mother,Parent):

def cook_test(self):

super(Son,self).cook()

print(“正在煮饭[茄子豆角]”)

s=Son()

# print(Parent.mro())

# print(Son.mro())

s.cook()

s.cook_test()

print(Son.mro())

print(Son.mro)

random.randint()

class Cs():

def cook(self):

pass

class Parent(Cs):

def cook(self):

print(“正在煮饭[辣椒炒肉]”)

class Mother(Cs):

def cook(self):

print(“正在煮饭[红烧肉]”)

class Son(Mother,Parent):

def cook_test(self):

super(Son,self).cook()

print(“正在煮饭[茄子豆角]”)

# 需要一个厨师

def mai_fan(chushi:Cs):

# 断言----会抛出异常

assert isinstance(chushi,Cs)

chushi.cook()

需要一个厨师

def mai_fan(chushi:Cs):

断言----会抛出异常

if isinstance(chushi,Cs) == True:

chushi.cook()

else:

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里无偿获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一门面向对象的编程语言,它支持封装继承多态封装是指将数据和行为封装在一个类中,对外部隐藏实现细节,只保留接口。Python通过使用双下划线“__”来实现类的私有属性和方法。 继承是指一个子类可以继承父类的属性和方法,并且可以自己添加新的属性和方法。Python中使用类名后面的括号指定父类,子类会自动继承父类的所有属性和方法。 多态是指同一个方法在不同的子类中具有不同的实现方式。Python中的多态是通过方法重写(覆盖)实现的。子类可以重写父类的方法,并且可以在子类中调用父类的同名方法。 下面是一个简单的Python类的示例,展示了封装继承多态的用法: ```python # 定义一个Animal类 class Animal: def __init__(self, name): self.name = name def speak(self): pass # 定义一个Dog类,继承Animal类 class Dog(Animal): def speak(self): return "Woof!" # 定义一个Cat类,继承Animal类 class Cat(Animal): def speak(self): return "Meow!" # 创建一个Dog对象和一个Cat对象 dog = Dog("Rufus") cat = Cat("Fluffy") # 调用它们的speak()方法,输出不同的结果 print(dog.speak()) # 输出:Woof! print(cat.speak()) # 输出:Meow! ``` 在这个示例中,Animal类封装了一个名称属性和一个空的speak()方法,子类Dog和Cat继承了Animal类,并重写了speak()方法以实现多态。最后创建了一个Dog对象和一个Cat对象,分别调用它们的speak()方法,输出不同的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值