@classmethod と @staticmethod
適切なデコレーターでクラスメソッドと静的メソッドを定義します。
「@classmethod と @staticmethod」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
導入
インスタンス・クラス・静的メソッド
class Demo:
def instance(self): return 'instance'
@classmethod
def class_m(cls): return f'class: {cls.__name__}'
@staticmethod
def static_m(): return 'static'
d = Demo()
print(d.instance())
print(Demo.class_m())
print(Demo.static_m())ファクトリとしての@classmethod
class Date:
def __init__(self, y,m,d): self.y,self.m,self.d=y,m,d
@classmethod
def today(cls):
from datetime import date
d = date.today()
return cls(d.year, d.month, d.day)
def __repr__(self): return f'{self.y}-{self.m}-{self.d}'
print(Date.today())継承と@classmethod
class Animal:
@classmethod
def create(cls, name):
return cls(name)
def __init__(self, name): self.name = name
class Dog(Animal): pass
d = Dog.create('Rex')
print(type(d).__name__, d.name)ユーティリティとしての@staticmethod
class MathHelper:
@staticmethod
def clamp(value, lo, hi):
return max(lo, min(hi, value))
print(MathHelper.clamp(15, 0, 10))
print(MathHelper.clamp(-5, 0, 10))@staticmethodとモジュール関数の比較
class Validator:
@staticmethod
def is_email(s): return '@' in s and '.' in s
print(Validator.is_email('user@example.com'))
print(Validator.is_email('not-an-email'))インスタンスから呼び出す
class C:
@classmethod
def who(cls): return cls.__name__
@staticmethod
def pi(): return 3.14
c = C()
print(c.who())
print(c.pi())シングルトンのクラスメソッド
class Singleton:
_instance = None
@classmethod
def get(cls):
if cls._instance is None:
cls._instance = cls()
return cls._instance
a = Singleton.get()
b = Singleton.get()
print(a is b)クラスメソッドのオーバーライド
class Base:
@classmethod
def info(cls): return f'{cls.__name__} info'
class Child(Base): pass
print(Base.info())
print(Child.info())clsによる型チェック
class Shape:
@classmethod
def make(cls):
return cls() # NOT Shape()
class Square(Shape): pass
print(type(Square.make()).__name__)@propertyとの組み合わせ
class Config:
_data = None
@classmethod
def load(cls):
if cls._data is None:
cls._data = {'debug': True}
return cls._data
print(Config.load())クイックチェック
復習
学習を続ける
よくある質問
「@classmethod と @staticmethod」レッスンは無料ですか?
はい。「@classmethod と @staticmethod」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「@classmethod と @staticmethod」で何を学びますか?
適切なデコレーターでクラスメソッドと静的メソッドを定義します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「@classmethod と @staticmethod」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 第一級オブジェクトとしての関数
- カスタムデコレーターの作成
- @property デコレーター
- @classmethod と @staticmethod