python的类写法_Python3 类静态数据的写法
首先。。。Python和Java不一樣,是解釋性的語(yǔ)言,走到哪兒,才會(huì)有什么東西。Python在開(kāi)始定義你寫的Complex類時(shí),還并沒(méi)有完成Complex類,所以不能實(shí)例化。
所以那就延后定義吧。。。比如在生成第一個(gè)對(duì)象之前,用簡(jiǎn)單的裝飾器吧。
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
# 改善后的寫法, 但是無(wú)法在class級(jí)別進(jìn)行緩存
# 而且變成了函數(shù)調(diào)用, 非我本意
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的‘類變量‘了。不過(guò)Python沒(méi)有嚴(yán)格的private屬性(雖然Java也可以反射訪問(wèn)==)
另外,用元類也可以,算是高級(jí)的裝飾器
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
# 改善后的寫法, 但是無(wú)法在class級(jí)別進(jìn)行緩存
# 而且變成了函數(shù)調(diào)用, 非我本意
@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)
或者最簡(jiǎn)單的,在第一次實(shí)例化的時(shí)候檢測(cè),但是代碼就比較難看了。處理遞歸之類的。。。
總結(jié)
以上是生活随笔為你收集整理的python的类写法_Python3 类静态数据的写法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: eltable刷新整个表格方法_多个子表
- 下一篇: springmvc常用5种注解_电线电缆
