python 的类

1.类创建

2.类方法

3.类的属性(变量)

4.类的继承


1.类创建

class A:
    pass    #pass 是空语句 ,A是类名


或是继承父类

例:A类 的 父类是 B类

class A(B):
    pass


2.类方法

类方法分为三种:

1.实例方法

2.类方法

3.静态方法


实例方法:

----------------实例方法的特点-------------------------------

0.构造方法 :构造方法就是一个类在实例化的时候一定执行的函数,用于初始化实例,默认的构造方法是空

1.实例方法的第一个参数必须是 self ,且不能省略

2.参数 self 的作用是 表示 实例本身。例如 调用实例的对象x,则是 self.x

3.实例方法的调用需要实例化类,并以 实例名.方法名(参数)  形式调用

构造方法:

构造方法的名字为 __init__(),如:

class Demo:
    def  __init__(self,x,y)
         self.x = x
         self.y = y
上面的构造方法表示 实例化Demo类时,若传给他2个参数 x,y。则把x,y的指 赋给Demo实例的x和y变量。

----------------以上都是实例方法-------------------------------


类方法:

1.类方法是属于类的方法,可以直接通过类名进行调用,如: 类名.方法名()

2.实例方法的默认参数是 self,表示实例本身,而类方法的默认参数是 cls,表示类本身。

3.类方法定义之前要在上一行写上 @classmethod 修饰

4.类方法可以直接通过类名调用,但也可以通过 实例名调用


类方法的好处是:通过默认传入表示类的参数 cls,可以获取到类的一些属性,如:

class Demo:
    @classmethod
    def fun(cls):
        print(cls.__name__) # cls.__name__ 表示类名

Demo.fun()
#打印结果:Demo 

静态方法:

1.定义静态方法之前要在其上一个写上 @staticmethod

2.静态方法是没有默认参数的 (没有表示实例的self,也没有表示类的 cls)

3.静态方法也可以通过类名或实例名调用


三种方法代码:

class Demo:
    def instanceM(self):
        print('this is instance method')

    @classmethod
    def classM(cls):
        print('this is class:%s,this is class method'%(cls.__name__))

    @staticmethod
    def staticM():
        print('this is static method')

d = Demo()      #要调用实例方法,先实例化
d.instanceM()  # 调用实例方法
Demo.classM()  #调用类方法
Demo.staticM()  #调用静态方法
'''打印结果:
this is instance method
this is class:Demo,this is class method
this is static method
'''


3.类的属性(变量)

所谓类的属性 就是变量的一种状态。一个变量(例如name)可以表示一个类的一个属性(name),也可以表示不同实例各自的属性(name)

类的属性分两种:(实例属性和类属性)

类属性:表示一个类中的全部实例都有的这个特性,即所有实例都共有这么一个变量。通过 类名.变量名 操作

实例属性:实例属性即同一个类的不同实例,其值是不想关联也不互相影响的。实例属性用 self.变量名 操作 或 通过 实例名.变量名操作

注意:在实例化的过程中,类的所有以初始化属性都会被拷贝一份副本到实例当中去。


1.当通过类属性来修改一个类变量a时,该类的所有实例a的值都会变

2.但实力属性的优先级比类属性高,当一个实例已经用实例属性来修改一个变量a为2时,即使接着再用类属性来修改a,该实例a的值仍为2

class Demo:
    num = 1                     #类的属性num
    def __init__(self,x):
        self.x = x              #实例属性x

    def changCLASS(self):
        Demo.num = 10           #修改类属性(通过类名调用)

    def changINS(self):           #修改实例属性,通过self调用
        self.num = 2

d1 = Demo(2)
d2 = Demo(3)
d1.changINS()          #表示d1 修改自己的 num,d2的num是没变的,实例属性的优先级比类属性高若实力属性已经设定了变量num为2
                    #接着即使再通过修改类属性的方式修改这个变量为10,该实例的num还是2
d1.changCLASS()       #修改 类属性

print(d1.num)       #2
print(d2.num)       #10    


4.类的继承

子类继承父类后,就拥有了父类的属性和方法,但不能继承父类的私有属性和方法。(属性名或方法名前加两个下划线__表示私有)

class A:
    __privateCount = 0  # 私有变量
    publicCount = 0    # 公开变量

class B(A):         #B是A的子类
    pass

b = B()     #实例化B
print(b.publicCount)
print(b.__privateCount) #报错,因为子类不能继承父类的私有成员


多继承:

python允许多继承操作,即一个子类可以继承多个父类。那有些问题就来了。

1.当多个父类中的属性或方法重名时,怎么办呢?

在python3中有条规则,从继承的父类顺序(左到右)来搜索方法

如:

class p1:
    def print(self):
        print('p1');

class p2:
    def print(self):
        print('p2')

class c1(p1,p2):
    def print(self):
        print('c1')

class c2(p1,p2):
    pass


if __name__ == '__main__':
    c1 = c1()
    c2 = c2()
    c1.print()  #c1
    c2.print()  #p1



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值