python 학습노트-정적 방법과 클래스 방법의 차이

6387 단어 python 학습 노트
python 클래스 문법에는 세 가지 방법, 실례 방법, 정적 방법, 클래스 방법이 있다.

# coding:utf-8


class Foo(object):
    """ """

    def instance_method(self):
        print(" {} , ".format(Foo))

    @staticmethod
    def static_method():
        print(" ")

    @classmethod
    def class_method(cls):
        print(" ")

foo = Foo()
foo.instance_method()
foo.static_method()
foo.class_method()
print('----------------')
Foo.static_method()
Foo.class_method()

실례 방법은 실례 대상만 호출할 수 있고 정적 방법 (@staticmethod로 장식하는 방법), 클래스 방법 (@classmethod로 장식하는 방법) 은 클래스나 클래스의 실례 대상에 호출될 수 있습니다.실례 방법, 첫 번째 매개 변수는 기본적으로 실례 대상을 전달해야 하며, 일반적으로self를 사용하는 것이 습관이 되어 있다.정적 방법, 매개 변수에 요구가 없습니다.클래스 방법, 첫 번째 매개 변수는 기본적으로 클래스를 전달해야 하며, 일반적으로cls를 사용합니다.정적 방법, 유형 방법의 사용 차이 또는 장면 사용

1. 클래스 방법은 자바에서 여러 개의 구조 함수를 정의하는 상황을 모의하는 데 사용된다.


python 클래스에는 초기화 방법이 하나밖에 없기 때문에 상황에 따라 클래스를 초기화할 수 없습니다.

# coding:utf-8


class Book(object):

    def __init__(self, title):
        self.title = title

    @classmethod
    def create(cls, title):
        book = cls(title=title)
        return book

book1 = Book("python")
book2 = Book.create("python and django")
print(book1.title)
print(book2.title)

특히 정적 방법도 상기 기능을 실현할 수 있기 때문에 정적 방법은 매번 유형의 이름을 써야 하기 때문에 불편하다.

2. 클래스에서 정적 방법 방법이 정적 방법을 사용하는 경우.


다음 코드는 정적 방법으로 다른 정적 방법을 사용합니다. 클래스 방법으로 정적 방법을 바꾸면 클래스를 대체하여 코드를 간소화할 수 있습니다.클래스 이름이 수정되는 것을 방지하기 때문에 클래스 정의에서 원래의 클래스 이름을 수정할 필요가 없습니다.

# coding:utf-8


class Foo(object):
    X = 1
    Y = 2

    @staticmethod
    def averag(*mixes):
        return sum(mixes) / len(mixes)

    @staticmethod
    def static_method():
        return Foo.averag(Foo.X, Foo.Y)

    @classmethod
    def class_method(cls):
        return cls.averag(cls.X, cls.Y)

foo = Foo()
print(foo.static_method())
print(foo.class_method())


3. 상속류의 차이


아래 코드에서 알 수 있듯이 만약에 하위 클래스가 하위 클래스를 계승하는 방법이 있다면 하위 클래스는 하위 클래스의 정적 방법을 덮어쓰고 하위 클래스의 실례는 하위 클래스의staticmethod 정적 방법, 이 방법을 사용합니까, 아니면 부모 클래스의 방법과 클래스 속성을 사용합니까?하위 클래스의 실례는 부모 클래스의class 를 계승한다method 클래스 방법, 이 방법을 호출합니다. 호출하는 방법은 하위 클래스 방법과 하위 클래스의 클래스 속성입니다.

# coding:utf-8


class Foo(object):
    X = 1
    Y = 2

    @staticmethod
    def averag(*mixes):
        return sum(mixes) / len(mixes)

    @staticmethod
    def static_method():
        return Foo.averag(Foo.X, Foo.Y)

    @classmethod
    def class_method(cls):
        return cls.averag(cls.X, cls.Y)


class Son(Foo):
    X = 3
    Y = 5

    @staticmethod
    def averag(*mixes):
        return sum(mixes) / 3

p = Son()
print(p.static_method())
print(p.class_method())
# 1.5
# 2.6666666666666665

좋은 웹페이지 즐겨찾기