Python Class常用语法

Python 自定义Class常用语法

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python Class常用语法



前言

提示:这里可以添加本文要记录的大概内容:

_func、__func、func_、__func__含义。


一、下划线函数/变量

1.1、_func,仅供内部使用

# test.py
class example():
    def __init__(self):
        pass
    def _func1():
        return "func1"

可调用范围:类内、py文件内实例属性、外部py文件实例属性不可调用。

1.2、__func,仅供类内部使用

# test.py
class example():
    def __init__(self):
        pass
    def __func2():
        return "func2"

可调用范围:类内、py文件内实例属性不可调用、外部py文件实例属性不可调用。

1.3、func_,区分特殊字符

# test.py
class example():
    def __init__(self):
        pass
    def class_():
        return "function class_"

可调用范围:类内、py文件内实例属性、外部py文件实例属性,避免命名冲突。

1.4、__func__,类中特殊方法

# test.py
class example():
    def __init__(self):
        pass

二、super(XXX, self).__init__()

对继承自父类的属性进行初始化,并且用父类的初始化方法初始化继承的属性。

三、装饰器

3.1、@classmethod与@staticmethod

两个都是装饰器,前者定义类方法、后者定义静态方法。
@classmethod:第一个参数cls代表类本身,实例名.函数名()的方式调用,可以访问类属性/函数;
@staticmethod:无入参要求,函数与类/示例无关,内部无法访问类属性、方法。
普通方法:第一个参数self代表实例本身,实例名.函数名()的方式调用,可以访问实例属性/函数;

class example():
    # 类属性
    a = 5
    
    def __init__(self):
        # 实例属性
        self.a = 100
    
    @classmethod
    def func1(cls, param:int):
        return cls.a + param
        
    @staticmethod
    def func2(param:int):
        return param
    
    def func3(self, param:int):
        return self.a + param
if __name__=="__main__":
    E = example()
    E.func1(2) # 类方法返回:7
    
    E.func2(2) # 静态返回:2
    example().func2(2) # 静态返回:2
    example.func2(2) # 静态返回:2
    
    E.func3(2) # 普通方法返回:102

3.2、@property 与 @*.setter

@property:表示可读,使得像访问属性一样访问类 / 实例的函数,如:当类存在私有变量,仅支持在实例初始化时赋值并且支持读取变量值,可以考虑这种方法。
@setter:表示可写,使用位置必须在@property之后,
@deleter:表示可删除,使用位置必须在@property之后,

class example():    
    def __init__(self, a:int):
        self._a = a
    
    @property
    def a(self):
        return self._a
                
    @a.setter
    def a(self, a:int):
        self._a = a
                
    @a.deleter
    def a(self):
        del self._a
       
if __name__=="__main__":
    E = example(a=50)
    print(E.a) # 类方法返回:50
    
    E.a = 100
    print(E.a) # 静态返回:100
    del E.a # 删除E的_a属性
    
    print(E.a) # 报错 “AttributeError: 'example' object has no attribute '_a'

总结

提示:这里对文章进行总结:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值