クラス3つのデコレータ

クラス3つのデコレータ

メソッドの装飾

  • 自己プロパティのない@classmethod --->装飾的な方法、唯一のプロパティクラスCLS

  • @staticmethod --->装飾的な静的メソッドは、どちらも自己の属性は、クラスCLSの性質を持っていません

  • @property --->プロパティを偽装する方法

、@のクラスメソッド

オブジェクト属性のないクラスメソッドではなく、静的プロパティを使用して、このメソッドは、クラスメソッドで、クラスメソッドのデコレータ方法を飾られている、デフォルトのパラメータCLSがあり、このパラメータは現在のクラスです!

class A:
    __count = 0
    def __init__(self,name):
        self.name = name
        self.__add_count()  #只要执行init方法实例化对象就会产生调用 __add_count(),从而对静态属性__count操作
    @classmethod
    def __add_count(cls):  #私有方法
        cls.__count += 1  #让这个方法只能在内部被使用
    @classmethod #被classmethod装饰器装饰的方法,都有一个默认的参数,这个参数就是当前类
    def show_count(cls):
        return cls.__count

print(A.show_count())   # 0 类调用show_count方法查看类的静态属性
Sheldon = A('Sheldon')  # 实例化一个对象
print(Sheldon.show_count()) # 1 对象调用show_count方法查看类的静态属性


可以看出调用类方法,可以用对象调用,也可以使用类调用
但是这个方法默认参数永远是当前类的命名空间,而不是对象的

二、@ staticmethodデコレータの装飾静的メソッド

メソッドは、クラスのオブジェクトのプロパティを使用していない場合は、静的プロパティを使用していない - このメソッドのstaticmethod装飾@ staticメソッドは、実際にこの方法は、一般的な関数です。

一般的な方法 クラスメソッド staticメソッド
デフォルトパラメータ 自己 CLS ノー
変数の操作 Operationオブジェクトのプロパティ Operationクラス属性 操作オブジェクトのプロパティ、また操作クラス属性でもありません
名前空間が属します カテゴリ カテゴリ カテゴリ
メソッドを呼び出します オブジェクト クラス/オブジェクト クラス/オブジェクト
デコレーター @classmethod @staticmethod

変装の方法に三つ。@プロパティの属性

@ Name.setterノートでは、名前の装飾セッターどの機能、この関数は、この関数に同じ名前のプロパティを変更してはなりません

プロパティを削除するには、@ Name.deleter、呼び出し元メソッド

示例1
from math import pi
class Circle:
    def __init__(self,r):
        self.r = r

    @property  # 把一个方法伪装成属性 
    def area(self):   # 被property装饰器装饰的方法不能传递除self以外的参数
        return pi*self.r**2

    @property
    def perimeter(self):
        return self.r*pi*2

c1 = Circle(5)
print(c1.area)
c1.r = 10
print(c1.area)   调用的时候不用加()
class Person:
    def __init__(self,name):
        self.__name = name  # 不让外部随便修改
    @property
    def name(self):
        return self.__name

Sheldon = Person('Sheldon')
print(Sheldon.name) #这样写起到不容易被别人修改的作用

おすすめ

転載: www.cnblogs.com/SkyOceanchen/p/11444589.html