python的类写法_Python3 类静态数据的写法
首先。。。Python和Java不一樣,是解釋性的語言,走到哪兒,才會有什么東西。Python在開始定義你寫的Complex類時,還并沒有完成Complex類,所以不能實例化。
所以那就延后定義吧。。。比如在生成第一個對象之前,用簡單的裝飾器吧。
def lazy(clazz):
clazz.ZERO = clazz(0, 0)
clazz.ONE = clazz(1, 0)
return clazz
@lazy
class Complex:
def __init__(self, real, imag):
self._real = real
self._imag = imag
# 改善后的寫法, 但是無法在class級別進行緩存
# 而且變成了函數調用, 非我本意
def get_real(self):
return self._real
def get_imag(self):
return self._imag
def __repr__(self):
return 'Complex(%s, %s)' % (self._real, self._imag)
這樣就是Python的‘類變量‘了。不過Python沒有嚴格的private屬性(雖然Java也可以反射訪問==)
另外,用元類也可以,算是高級的裝飾器
class Meta(type):
def __new__(cls, name, bases, attrs):
clazz = type.__new__(cls, name, bases, attrs)
clazz.ZERO = clazz(0, 0)
clazz.ONE = clazz(1, 0)
return clazz
class Complex(metaclass=Meta):
def __init__(self, real, imag):
self._real = real
self._imag = imag
# 改善后的寫法, 但是無法在class級別進行緩存
# 而且變成了函數調用, 非我本意
@classmethod
def zero(cls):
return cls(0, 0)
@classmethod
def one(cls):
return cls(1, 0)
def get_real(self):
return self._real
def get_imag(self):
return self._imag
def __repr__(self):
return 'Complex(%s, %s)' % (self._real, self._imag)
或者最簡單的,在第一次實例化的時候檢測,但是代碼就比較難看了。處理遞歸之類的。。。
總結
以上是生活随笔為你收集整理的python的类写法_Python3 类静态数据的写法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eltable刷新整个表格方法_多个子表
- 下一篇: springmvc常用5种注解_电线电缆