首先。。。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 类静态数据的写法相关推荐

  1. 实现客户机(Client)类声明字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户机数量;定义静态函数成员ChangeServerName

    实现客户机(Client)类.声明字符型静态数据成员ServerName,保存其服务器名称:整型静态数据成员ClientNum,记录已定义的客户机数量:定义静态函数成员ChangeServerName ...

  2. [C++] 类的静态成员 (静态数据成员 和 静态成员函数)

    目录 一.声明静态成员: 二.定义静态成员: 三.使用类的静态成员: 四.静态成员类内初始化: 五.静态成员与普通成员的区别: 六.案例代码: 类内的静态成员包括: 静态数据成员 和 静态成员函数. ...

  3. python数据库建表_Python3创建mysql数据表结构和插入数据

    上一篇文章,我们已经成功通过 python3 连接到了数据库并新建了 spiders 数据库,今天我们就继续来学习 python3 如何创建 mysql 数据表及插入数据. import pymysq ...

  4. qt 不允许 dllimport 静态数据成员 的定义_C++类和对象的定义

    想用机器人赋能未来,少不了扎实的编程基本功,让我们跟着清华大学的C++语言程序课程一起过一遍C++的语法知识吧! C++语言特点--面向对象的程序设计 对象是现实中的对象在程序中的模拟,类是同一类对象 ...

  5. 类的静态成员函数和静态数据成员

    一.静态数据成员 1.定义: 静态数据成员就是给类的普通数据成员加上关键字static. 2.访问规则 静态数据成员也遵守public/protected/private访问规则 访问静态成员时,则可 ...

  6. 类的静态数据成员和静态成员函数浅析

    一.静态数据成员        类中的数据成员声明前加上static,则表示该数据成员为静态数据成员.除了与其他数据具有相同的public/private/protect访问属性外,还有一些其他的属性 ...

  7. c++对象长度之静态数据成员(3)

    当类中定义了静态数据成员.当类中定义了静态数据成员时,由于静态数据成员与静态变量原理相同(是一个含有作用域的特殊全局变量),因此该静态数据成员的初值会被写入编译链接后的执行文件中.当程序被加载时,操作 ...

  8. C++类静态成员与类静态成员函数

       当将类的某个数据成员声明为static时,该静态数据成员只能被定义一次,而且要被同类的所有对象共享.各个对象都拥有类中每一个普通数据成员的副本,但静态数据成员只有一个实例存在,与定义了多少类对象 ...

  9. 什么是静态成员(静态数据成员和静态函数成员)

    目录 一:静态成员: 二:静态数据成员: 三:静态数据成员的特点: 四:访问静态数据成员 五:静态函数成员,如何定义成员函数 六:静态数据成员的特点. 一:静态成员: 在c++类中声明成员时, 加上s ...

最新文章

  1. 又一次 Java 内存泄漏排查,新技能+1
  2. flex 动态显示时间
  3. iOS开发之自定义View
  4. ASP.NET MVC区域
  5. Java中的数据类型及相互转换方法
  6. python与用户交互、数据类型
  7. linux 编译查看链接库详情,Linux环境下的编译,链接与库的使用
  8. native c++ 之javah
  9. SpringMvc之参数绑定注解详解之一
  10. Android定时器AlarmManager(定时发送广播)
  11. RoR介绍:一个Java程序员的开发体验
  12. HTML汇率转换代码,利用JS实现汇率转换工具
  13. ocr初始化失败怎么办_应用程序正常初始化失败
  14. YOLOv5训练时出现Corrupt JPEG data: 2 extraneous bytes before marker 0xd9
  15. Android 密钥库系统 (一)
  16. 抖音变现模式?80%的人都不知道的秘密,三类更适合玩私域的产品
  17. 遇到vcruntime140_1.dll 无法继续执行代码问题
  18. python导入siri_python实现一个简洁siri功能
  19. 什么是seo?seo的定义
  20. 伪静态 真伪静态的区别

热门文章

  1. Delphi如果要追赶C#,最应该做的
  2. SqlServer2005/2008下sysproperties无效的解决办法
  3. C语言解决汉诺塔问题
  4. Feign,Apache Http Client,OkHttp的区别
  5. rabbitMq自动创建队列
  6. set和multiset容器简介
  7. 日常生活 -- 开博一周年
  8. 品茗论道说广播(Broadcast内部机制讲解)
  9. Android 6.0 PowerManagerService状态分析
  10. Xposed如何实现类中函数的调用