class Date:"""方法一:使用类方法""" """达到多个构造函数"""# Primary constructordef __init__(self, year, month, day):self.year = yearself.month = monthself.day = day# Alternate constructor@classmethod #可以直接除了使用 __init__() 方法外,还有其他方式可以初始化它。def today(cls): # 不传参t = time.localtime()return (t.tm_year, t.tm_mon, t.tm_mday)print(Date.today()) # 类调用# (2022, 1, 2)class newDate(Date): # 可以继承passprint(newDate.today()) ## (2022, 1, 2)
class Book(object):def __init__(self, title):self.title = title@classmethoddef create(cls, title):book = cls(title) # 传参数必须转化return bookbook1 = Book("python")book2 = Book.create("python and django")print(book1.title)print(book2.title)
类方法调用静态方法,可以让cls代替类,静态调用静态方法
class Foo(object):X = 1Y = 2@staticmethoddef averag(*mixes):return sum(mixes) / len(mixes)@staticmethoddef static_method():return Foo.averag(Foo.X, Foo.Y)@classmethoddef class_method(cls):return cls.averag(cls.X, cls.Y)foo = Foo()print(foo.static_method())print(foo.class_method())
静态方法不受类的影响
类方法:与cls有关
实例方法:与self有关
class Dog():@classmethoddef formal_name(cls):return cls.__name__.lower()@staticmethoddef forever_name():return "dog"class Husky(Dog):passprint(Husky.formal_name(),Husky.forever_name())#husky dog
