python中的class

本文详细介绍了Python中的类,包括类属性、实例属性、实例方法、类方法和静态方法的定义及使用。同时,讨论了类中的魔法函数以及深拷贝和浅拷贝的概念,强调了浅拷贝只拷贝对象引用,而深拷贝会递归拷贝所有子对象。

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

class

参考

https://www.cnblogs.com/geogre123/p/10142510.html

python的类中将在其中定义的变量叫做属性,将函数叫做方法
其中属性分为类属性和实例属性,方法分为静态方法,类方法,实例方法
其中类属性是class中固有属性,而实例属性根据不同的实例对象可以创建不同的实例属性,也即在不同实例中类属性是共享的而实例属性是不共享的

实例方法

定义:第一个参数必须是实例对象,该参数名一般约定为“self”,通过它来传递实例的属性和方法(也可以传类的属性和方法);只能由实例对象调用

类方法

定义:使用装饰器@classmethod。第一个参数必须是当前类对象,该参数名一般约定为“cls”,通过它来传递类的属性和方法(不能传实例的属性和方法);
调用:实例对象和类对象都可以调用
类方法是将类本身作为对象进行操作的方法。

静态方法

定义:使用装饰器@staticmethod。参数随意,没有“self”和“cls”参数,但是方法体中不能使用类或实例的任何属性和方法;
静态方法是类中的函数,不需要实例。静态方法是独立的、单纯的函数,它仅仅托管于,某个类的名称空间中,便于使用和维护。

import time
class ClassStu(object):
    __num = 0
    def __new__(cls, *args, **kwargs):
        ClassStu.addNum()
        return super(ClassStu, cls).__new__(cls)
    @classmethod
    def addNum(cls):
        cls.__num += 1

    @classmethod
    def getNum(cls):
        return cls.__num

    @staticmethod
    def getCurTime():
        return time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))


class Student(ClassStu):
    def __init__(self, name):
        self.name = name


stu1 = Student('张三')
stu2 = Student('李四')
print(ClassStu.getCurTime())
print(ClassStu.getNum())

类种相关函数使用方法

print(dir(object))  # 查看类中所有的方法

class A(object):
    pass
class B(object):
    pass

class C(A, B):
    def __init__(self, name, age):
        self.name = name
        self.age = age
        pass
    pass


x = C('Jack', 20)
print(x.__dict__)  # x是C类型的一个实例对象
print(C.__dict__)  # 实例对象的属性字典
print('--------------')
print(x.__class__)  # 输出了对象所属的类
print(C.__bases__)#C类的父类类型的元素
print(C.__base__)#最近的一个继承类
print(C.__mro__)#类的层次结构
print(A.__subclasses__())#子类列表

类中相关的魔法函数

a = 20
b = 100

c = a + b
d = a.__add__(b)
print(c)
print(d)


class Student():
    def __init__(self, name,age):
        self.name=name
        self.age=age
        pass

    def __add__(self, other):
        return self.name + other.name
    def __len__(self):
        return len(self.name)
    def __str__(self):
        #print('我叫{},我今年{}岁了。'.format(self.name,self.age))
        print(f'我叫{self.name},我今年{self.age}岁了')
    pass

stu1 = Student('张三',16)
stu2 = Student('李四',17)
print(stu1+stu2)
print(stu1.__len__())
stu1.__str__()
stu2.__str__()

类中的深拷贝和浅拷贝

浅拷贝:python拷贝一般都是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用同一个子对象
深拷贝:使用copy模块的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象所有的子对象也不相同

#变量的赋值
import copy
class Cpu:
    pass
class Disk:
    pass
class Computer:
    def __init__(self,cpu,disk):
        self.cpu=cpu
        self.disk=disk
        pass
    pass
cpu=Cpu()
disk=Disk()
comp1=Computer(cpu,disk)
#变量的直接赋值
comp2=comp1

print(comp2,comp2.cpu,comp2.disk)
print(comp1,comp1.cpu,comp1.disk)

#浅拷贝(通过结果分析可得这里comp3和comp1两者之间的id不同,不同于直接赋值结果全部相同)

comp3=copy.copy(comp1)
print(comp1,comp1.cpu,comp1.disk)
print(comp3,comp3.cpu,comp3.disk)

#深拷贝(不同于浅拷贝,将其中所有的信息进行递归方式的创建)

comp4=copy.deepcopy(comp1)
print(comp1,comp1.cpu,comp1.disk)
print(comp4,comp4.cpu,comp4.disk)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值