python面向对象编程2   オブジェクト指向2

クラス変数とインスタンス変数

クラス変数:

クラス変数とは、クラスを作ったのとき、クラスの名の下に宣言された変数はクラス変数と見なされます。

class Sample1:
	name = 'name'
print(Sample1.name) #name
Sample1.name = 'changed_name'
print(Sample1.name) #changed_name

インスタンス変数

class Sample2:
    def __init__(self, value):
        self.value = value

s1 = Sample2('AAA')
s2 = Sample2('BBB')
print(s1.value)  # AAA
print(s2.value)  # BBB
s1.value = 'CCC'
print(s1.value)  # CCC
print(s2.value)  # BBB

オブジェクトs1が参考している値を変更しても、s2の値には全然影響がありません。

クラス関数

クラス変数があるように、クラス関数もあります。

class TaxCalc:
    @classmethod
    def class_method(cls, price):
        assert cls.__name__ == TaxCalc.__name__
        return int(price * 0.08)

    @staticmethod
    def static_method(price):
        return int(price * 0.08)


print(TaxCalc.class_method(1000))
print(TaxCalc.static_method(1000))

インスタンス関数との区別をつけるため、関数の頭に@classmethodをつけることになっています。クラスメソッドはメソッドのselfと同じで、第1引数に自動的に自身のクラスが格納されます。

classmethod :クラスメソッド
staticmethode :スタティックメソッド

特に:
クラスの情報が必要な場合は、@classmethodを使います。
派生クラスでオーバーライドする場合も、@classmethodを使います。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值