모든 Python 클래스가 개체를 확장해야 합니까?
다음과 같은 두 가지 작업이 모두 가능하다는 것을 알게 되었습니다.
class Foo():
def a(self):
print "hello"
class Foo(object):
def a(self):
print "hello"
모든 Python 클래스가 개체를 확장해야 합니까?개체를 확장하지 않을 경우 발생할 수 있는 문제가 있습니까?
Python 2에서 상속 대상이 아님object
오래된 스타일의 클래스를 만들 것이고, 다른 효과들 중에서도, 그것은 원인이 됩니다.type
다른 결과를 제공하는 방법:
>>> class Foo: pass
...
>>> type(Foo())
<type 'instance'>
대.
>>> class Bar(object): pass
...
>>> type(Bar())
<class '__main__.Bar'>
또한 다중 상속에 대한 규칙은 여기서 요약하려고 시도하지 않는 방식으로 다릅니다.제가 본 MI에 대한 모든 좋은 문서는 새로운 스타일의 수업을 설명합니다.
마지막으로 Python 3에서 오래된 스타일의 클래스가 사라졌고, 상속은object
암시적이 되었습니다.따라서 이전 소프트웨어와 역호환할 필요가 없는 한 항상 새로운 스타일 클래스를 선호합니다.
Python 3에서는 클래스가 확장됩니다.object
당신이 그렇게 말하든 아니든 암묵적으로.
Python 2에는 오래된 스타일과 새로운 스타일의 클래스가 있습니다.클래스가 새 스타일임을 나타내려면 다음에서 명시적으로 상속해야 합니다.object
그렇지 않은 경우 이전 스타일의 구현이 사용됩니다.
당신은 일반적으로 새로운 스타일의 수업을 원합니다.상속 대상object
노골적으로이는 Python 2와 호환되는 것을 목표로 하는 Python 3 코드에도 적용됩니다.
python 3에서는 세 가지 방법으로 클래스를 만들 수 있으며 내부적으로는 모두 동일합니다(예 참조).클래스를 만드는 방법은 중요하지 않습니다. python 3의 모든 클래스는 object라는 특수 클래스에서 상속됩니다.클래스 개체는 python의 기본 클래스이며 이중 밑줄 메서드, 설명자, super() 메서드, property() 메서드 등과 같은 많은 기능을 제공합니다.
예 1.
class MyClass:
pass
예 2.
class MyClass():
pass
예 3.
class MyClass(object):
pass
다른 답변에서 다루었듯이, Python 3은 객체로부터 암묵적으로 상속됩니다.하지만 그들은 당신이 무엇을 해야 하는지, 관습은 무엇인지 말하지 않습니다.
Python 3 문서 예제는 모두 다음과 같은 스타일인 관습을 사용하므로 Python 3의 향후 코드에 대해서는 이를 따르는 것이 좋습니다.
class Foo:
pass
출처: https://docs.python.org/3/tutorial/classes.html#class-objects
예 인용문:
클래스 개체는 속성 참조와 인스턴스화의 두 가지 작업을 지원합니다.
특성 참조는 Python: obj.name 의 모든 특성 참조에 사용되는 표준 구문을 사용합니다.유효한 특성 이름은 클래스 개체를 만들 때 클래스의 네임스페이스에 있던 모든 이름입니다.클래스 정의가 다음과 같은 경우:
class MyClass: """A simple example class""" i = 12345 def f(self): return 'hello world'
다른 인용구:
일반적으로 인스턴스 변수는 각 인스턴스에 고유한 데이터에 대한 것이고 클래스 변수는 클래스의 모든 인스턴스에서 공유하는 속성 및 메서드에 대한 것입니다.
class Dog: kind = 'canine' # class variable shared by all instances def __init__(self, name): self.name = name # instance variable unique to each instance
예, 모든 Python 클래스는 확장(또는 하위 클래스, 여기서는 Python) 개체를 사용해야 합니다.일반적으로 심각한 문제는 발생하지 않지만 경우에 따라(여러 상속 트리와 마찬가지로) 이 문제가 중요합니다.이를 통해 Python 3과의 호환성도 향상됩니다.
, 에서는 python3를 .object
기존 스타일 클래스를 제공합니다. 기존 스타일 클래스보다 새 스타일 클래스를 사용할 수 있습니다.
언급URL : https://stackoverflow.com/questions/15374857/should-all-python-classes-extend-object
'programing' 카테고리의 다른 글
Oracle의 단순 재귀 쿼리 (0) | 2023.08.09 |
---|---|
Spring Boot JPA H2 콘솔이 실행되고 있지 않습니다. application.properties 파일이 무시됩니다. (0) | 2023.08.09 |
각도 2에서 관측 가능한 데이터를 가져오는 방법 (0) | 2023.08.09 |
PL/SQL의 null 연관 배열에 대한 이 검사가 실패하는 이유는 무엇입니까? (0) | 2023.08.09 |
mysql group by hour - 잘못된 결과를 피하는 방법 (0) | 2023.08.09 |