Class 类

本文详细介绍了Python中类的使用,包括私有变量和方法的保护、对象关联、单一和多重继承、多态性、重写方法以及super的运用,以及类属性和类方法的定义和操作方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Class Abc(object):
	def xxx():
		pass

Class Abc:
	def xxx():
		pass

1、私有变量

类变量可以被外部调用并改动值

class Cat(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __str__(self):
        return "我的名字叫{},今年{}岁".format(self.name,self.age)

xiaobai = Cat("小白",10)
print(xiaobai)

xiaobai.age=20
print(xiaobai)

在这里插入图片描述
此时小白的年龄会被改动,为了防止这种在外部改动的方法,我们可以使用私有属性,__xxx ,定义对象时在前面加上两个_即可,此时该属性(__xxx)只能被该类里面的方法去调用

# -*- coding: utf-8 -*-

class Cat(object):
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def __str__(self):
        return "我的名字叫{},今年{}岁".format(self.name,self.__age)

    def change_age(self, new_age):
        self.__age = new_age


xiaobai = Cat("小白",10)
print(xiaobai)

xiaobai.age=20
print(xiaobai)

# 此时调用内部方法去改动
xiaobai.change_age(12)
print(xiaobai)

在这里插入图片描述
可以看到小白年龄被成功修改

2、私有方法

跟私有对象同理,不能直接 类名.__方法调用
在这里插入图片描述
此时会报错找不到这个__change_age方法,该方法是私有方法,只能被类里面的其他方法调用,例如change_age_new

# -*- coding: utf-8 -*-

class Cat(object):
    def __init__(self, name, age):
        self.name = name
        self.__age = age

    def __str__(self):
        return "我的名字叫{},今年{}岁".format(self.name,self.__age)

    def __change_age(self, new_age):
        self.__age = new_age

    def change_age_new(self, new_age):
        if new_age > 0:
            self.__change_age(new_age)

xiaobai = Cat("小白",10)
print(xiaobai)


xiaobai.change_age_new(-5)
print(xiaobai)

xiaobai.change_age_new(20)
print(xiaobai)

在这里插入图片描述

3、对象关联

例如 有一个班级叫 room3-2 ,班里有 张三、李四、王五、郑六四位学生,班级与学生存在关联关系
在这里插入图片描述
此时我们给班级新建一个方法,用于 添加学生进入班级
在这里插入图片描述
则可以通过班级类查看学生类下信息,person.name实际调用的是student类中的self.name属性

4、继承

① 单继承

()里面填需要继承的父类即可

# 定义父类
class baba():
    def tezheng(self):
        print("我有6只手")

# 定义子类 继承baba父类
class erzi(baba):
    pass


laowang = erzi()
laowang.tezheng()

此时laowang继承baba类,该对象也有6只手
在这里插入图片描述

② 多继承

()里面填需要继承的父类即可

class baba():
    def baba_tezheng(self):
        print("我有6只手")

class mama():
    def mama_tezheng(self):
        print("我有6条腿")

# 定义子类 继承baba和mama两个父类
class erzi(baba,mama):
    pass


laowang = erzi()
laowang.baba_tezheng()
laowang.mama_tezheng()

在这里插入图片描述

③ 多态

# 定义父类
class baba():
    def __init__(self,name):
        self.name=name
    def tezheng(self):
        print("我有6只手")

class mama():
    def __init__(self,name):
        self.name=name
    def tezheng(self):
        print("我有6条腿")

# 定义子类 继承baba和mama两个父类
class erzi(baba,mama):
    def __init__(self,name):
        self.name=name
    def erzi_tezheng(self,who):
        print("儿子继承了{}的特征".format(who.name))
        who.tezheng()

laowang = erzi("老王")
wangmama = mama("王妈妈")
wangbaba = baba("王爸爸")

laowang.erzi_tezheng(wangmama)
laowang.erzi_tezheng(wangbaba)

这里传入mama则继承mama的,传入baba就继承baba的,这就是多态
在这里插入图片描述

④ 重写

即子类覆盖父类方法,子类与父类方法名称相同即可覆盖

# 定义父类
class baba():
    def __init__(self,name):
        self.name=name
    def tezheng(self):
        print("我有6只手")


# 定义子类 继承baba和mama两个父类
class erzi(baba):
    def __init__(self,name):
        self.name=name
    def tezheng(self):
        print("{}有7条腿".format(self.name))

laowang = erzi("老王")
laowang.tezheng()

在这里插入图片描述
注释子类同名方法后,即继承父类方法
在这里插入图片描述

⑤ super

继承父类方法,同时还能使用自己的方法。即在父类方法的基础上新增功能。

class baba():
    def __init__(self,name):
        self.name=name
    def tezheng(self):
        print("{}我有6只手".format(self.name))

# 定义子类 继承baba父类
class erzi(baba):
    def __init__(self,name):
        self.name=name

    def tezheng(self):
        super().tezheng()
        print("{}有7条腿".format(self.name))

wangbaba = baba("王爸爸")
laowang = erzi("老王")
laowang.tezheng()

在这里插入图片描述

5、类属性

class Person():

    def __init__(self,name):
        self.name = name


zhangsan = Person("张三")
lisi  = Person("李四")
wangwu = Person("王五")
zhengliu  = Person("郑六")

例如我要统计 一共都多少个人,但是如果在方法里面直接计算,则会有问题
在这里插入图片描述

解决办法是设置一个类属性,类名+属性名定义类属性
在这里插入图片描述

6、类方法

类方法可以直接操作类属性

# 定义类方法规则模板
class xxx():
	
	@classmethod
	def yyy(cls):
		pass

在这里插入图片描述
类方法,可以通过实例对象(zhangsan)调用,也可以通过类名(Person)去调

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值