类属性、实例属性;继承;类方法、实例方法、静态方法

一、概念

1.1 类属性、实例属性、私有属性等

1.类:拥有相同属性和功能的对象的集合
2.对象:是类的实体
3.封装:隐藏了对象的属性和实现细节,只是对外提供接口或入口
4.类的创建:
class 类名称:
class 类名称()
5.类属性:
定义在类里面,在方法(函数外面)的属性
访问:类名称.类属性名称
可以直接访问,不需要实例化

6.实例属性
定义在__init__(初始化方法)中
访问:
在类里面:self.xxx (如果不加self,就只能在init里面用)
类外面:类实例.名称
>> __init__在类实例化的时候会自动调用
>>self:是实例本身,是个占位符,习惯写法
7.私有属性
不能被外部访问的属性是私有属性且不能被继承
创建:双下划线开头
__test=‘test’

8.私有方法
不能被子类继承的方法
def __test01(self):
在这里插入图片描述
在这里插入图片描述

二、类的特性

2.1 继承:

子类继承父类之后,就会拥有父类的属性和方法(私有fan属性和私有方法不可以继承)
语法: class test02(test01):

调用父类的方法:
(子类里面)self.方法名()
(子类外面)类实例.方法名()
如果子类和父类有相同的属性或方法,优先使用子类自己的

super().方法名
用来调用父类的方法
不管子类有没有实现该方法,只在父类里面找

如果不写继承的类,默认继承python的基类object()

2.2 举例

class Test01:
    def __init__(self):
        print('父类 >>> __init__')

    def test01(self):
        print('父类  >>> test01')

    def __test02(self):
        self.test01()
        print('父类  >>> test01')

class Test02(Test01):
    def __init__(self):
        print('子类 >>> __init__')

    def test01(self):
        print('子类  >>> test01')

    def test03(self):
        self.test01() # 调用test01方法,先找自己类是否有该方法,有就执行,没有再去父类去找该方法
        print('子类  >>> test03')
        super().__init__() # 父类的初始化方法
        super().test01() # 父类的方法

if __name__ == '__main__':
    a=Test02()
    a.test03()

2.3 多继承

多继承:一个类继承了多个类,这个类会继承父类们所有方法和属性(私有的除外)

class Test01:
    def test01(self):
        print('Test01  >>> test01')
class Test02:
    def __test01(self):
        print('Test02  >>> test02')
        
class Test03(Test01,Test02):
	print(Test03().test01)  #会打印Test01  >>> test01,从左往右开始调用方法

四、实例方法、类方法、静态方法

实例方法:
定义在类中,第一个参数【实例对象】,习惯用self(类实例)来表示
调用:类实例.方法名()

类方法:
定义在类中,通过@classmethod修饰,第一个参数是cls(类本身)
可以使用类的属性,不能调用实例方法或者实例属性
调用:类名称.方法名()或者 类实例.方法名()

使用场景:不需要重复初始化的时候,用在工具上比较多

静态方法:
定义在类中,通过@staticmethod,没有self或cls(实例或类),参数随意
调用:类名称.方法名()或者 类实例.方法名()

类方法和静态方法的区别:
相同点:
都是挂在类下面,可以通过类访问,都可以被类实例调用
不同点:
类方法可以使用类的属性和静态方法
静态方法不可以使用类的属性和方法

def test01(self): #类实例方法
	print('test01')
	
@classmethod   #类方法
def test02(cls):
	print('test02')
	
@staticmethod   #静态方法
def test03():
	print('test03')

if __name__=='__main__':
	Test01().test01()  #调用实例方法
	Test01.test02() #调用类方法
	Test01.test03()  #调用静态方法	
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值