2017-02-10 17 views
3

int/set/str/dict/etc의 새 개체를 만들 때 기본 클래스를 덮어 쓸 수 있기를 원합니다. int들에 대한기본 클래스 덮어 쓰기 (확장)?

예 :

class MyInt(int): 
    def __call__(self): 
     return self ** 2 

int = MyInt 

a = int('2') 
b = 3 
print(a) 
print(a()) 
print(int(3)()) 

print(5()) # Error -> this is what interests me to get working. 

는 전혀 할 수 있습니까?

+0

은 확실히 가능, 나머지에 대해 몰라. – Bharel

+1

그냥 5는 항상 buildin 형식'int'를가집니다. 'int = MyInt'라고 쓰면 buildin'int'를 대체하지 않습니다. 방금 로컬 var를 만듭니다. – Raz

답변

0

당신은 식별자에 대한 일부 Python 규칙을 다시 읽어야합니다.

파이썬 식별자 :

파이썬 식별자 변수, 함수, 클래스, 모듈 또는 다른 개체를 식별하는 데 사용되는 이름이다. 식별자는 문자 A부터 Z 또는 a에서 z 또는 밑줄 (_)로 시작하며 그 뒤에 0 개 이상의 문자, 밑줄 및 숫자 (0-9)가옵니다.

파이썬에서는 식별자 내에 @, $ 및 %와 같은 구두점 문자를 사용할 수 없습니다. 파이썬은 대소 문자를 구분하는 프로그래밍 언어입니다. 따라서 인력과 인력은 파이썬에서 두 개의 서로 다른 식별자입니다. 여기

파이썬 식별자에 대한 명명 규칙됩니다

  • 클래스 이름은 대문자로 시작합니다. 다른 모든 식별자는 소문자로 시작합니다.

  • 앞에 밑줄이 하나있는 식별자를 시작하면 식별자가 개인임을 나타냅니다.

  • 앞에 두 개의 밑줄이있는 식별자를 시작하면 강력한 개인 식별자가 표시됩니다.

  • 식별자가 두 개의 밑줄로 끝나면 식별자는 언어로 정의 된 특수 이름입니다. 이 Python 이름/식별자 규칙을 작성하여 dosn't 때문에

그래서, 당신의 코드는 5() 실패합니다.

그렇지 않으면, 당신은 이런 식으로 코드를 해킹 할 수

class MyInt(int): 
    def __call__(self): 
     return self ** 2 

int = MyInt 
a = int('2') 
print(a) 
print(a()) 
print(int(3)()) 
# Note here the underscore '_' 
_5 = int('3') 
print(_5) 
print(_5()) 

출력 : AST와

2 
4 
9 
3 
9 
+1

또 다른 예 :'a = 5; a.real' 작품. '5.real'은 – Raz

+0

Yes입니다. 왜냐하면'5'는 항상 int 형의 내장형이 될 것이기 때문입니다. 그래서 해석기는'5.real'을 이해하지 못하고'SyntaxError' 예외를 던질 것입니다. –

+3

혼란스러운 의견으로 죄송합니다. 구문 분석기가 점 뒤에 소수 부분을 기다리기 때문에'5.real'이 작동하지 않습니다. '(5) .real'과'5.0.real' 작품. – Raz