功能

python

java

示例

文件

一个模块(py文件)可有有多个类

一个文件只能有一个公有类(内部类也可为公有),且类名和文件名相同

作用域

公有:无

_前缀:约定私有,外部可访问;

__前缀:自动转换成类名+属性名

__init__:内建属性或方法

私有:private,类内部可访问

保护:protected,类和子类可以访问

默认 :无,同包可以访问

公有:public

继承

1.基类

object,包括内建类型

2.语法

类名(父类)

3.多重继承

允许

1.基类

Object,除了基本类型(int,float等)

2.语法

类名 implements 接口/类名 extends 父类

3.多重继承

只允许继承一个父类,但是允许实现多个接口

接口

1.常量(默认static final)

2.抽象方法(默认public)

3.默认方法(java8)

4.静态方法(java8)

5.私有方法(java9)

5.私有静态方法(java9)

抽象类

默认不支持,使用abc模块实现

1.语法

修改抽象类的元类为ABCMeta,

抽象方法:装饰器@abstractmethod

抽象属性:装饰器@abstractproperty

2.特性:抽象方法,其它同普通类;

1.特性

抽象方法,其它同普通类;

子类

1.直接继承:继承父类属性/方法,实现父类的抽象方法

2.虚拟子类:装饰器@类名.register,不会继承父类属性/方法,也不用实现父类的抽象方法,但可以通过issubclass/isinstance检测出继承关系

1.直接继承:继承父类属性/方法,实现父类的抽象方法

实例

动态类型,可动态为实例添加成员变量/成员方法

静态类型

成员变量

内建方法__init__定义:self.v1 = "test"

类内部定义:public String v1 = "test";

静态成员变量

类内部定义:public static String v1 = "test";

属于类,调用方式:类名.v1/实例名.v1

类成员变量

类内部定义:v1 = "test"

属性类,调用方式:类名.v1/实例名.v1

如果调用:实例名.v1 = "test2",则实例会新建一个v1变量,该实例就具有了属于自己的v1变量

成员方法

类内部定义:def test(self)

默认第一个参数为类的实例,约定为self

类内部定义:public void test()

方法内部有默认的关键字this, 代表类的实例

类成员方法

类内部定义:

@classmethod

def test(cls)

属于类,第一个参数代表类本身,约定使用cls。可以通过cls访问类成员变量

调用方式:类名.test()/实例名.test()

静态成员方法

类内部定义:

@staticmethod

def test()

属于类,可通过类名访问类成员变量

调用方式:类名.test()/实例名.test()

类内部定义:public static void test()

属于类,可以访问静态成员变量

调用方式:类名.test()/实例名.test()

super

1.简化形式(没有参数)

只能在方法内部使用,super().says();

2.带参形式

可以在任何地方使用,super(Test, instanse).says();

1.super

代表父类的实例,super.says();

描述符

可自定义在引用一个对象的属性时应该完成的事情;

描述符协议

__set__(self, obj, type=None):设置属性;

__get__(self. obj):获取属性;

__delete__(self. obj):对属性调用del时调用;

property

内置的描述符类型,它将一个属性链接到一组方法上。property接受4个可选参数:fget、fset、fdel和doc

类似:定义于成员变量,然后定义getter/setter方法

使用__slots__属性为指定的类设置一个静态属性列表,并在类的每个实例中跳过__dict__字典的创建过程;

不能为定义了槽的类实例动态添加属性

类的创建过程

__new__(cls):负责创建类实例的类方法;

__init__(self):创建对象之后马上调用初始化方法 ;

public 类名():构造方法

类对象

元类:metaclass,元类都默认继承自type

场景:可自定义metaclass对象,实现指定的功能

python语言最灵活的功能之一,应用于各大框架

class对象

场景:java反射,动态调用对象成员变量/方法

java语言最灵活的功能之一,应用于各大框架

内建属性/方法

python每个类都有相同的内建属性/方法;

1.内建属性

__class__:获取实例所在的类;

__bases__:获取类的所有父类构成元素;

__dict__:

类:包含共享的变量和函数(类属性,方法等);

实例:包含实例属性;

__doc__:类文档,help(类或实例)时调用;

__name__:类名;

__module__:模块名;

__mro__:方法解析顺序;

2.内建方法

2.1生命周期

__new__(cls):负责创建类实例的类方法;

__init__(self):创建对象之后马上调用初始化方法 ;

__del__:析构方法,执行清理动作,不建议操作;(2)

2.2类的表示

__str__:打印时调用,如果没有实现,使用repr;(1)

__repr__:使用类实例或者 print(repr(类实例))调用;(1)

__format__(self):类的实例用于字符串格式化;

__hash__(self):调用hash()时使用(__eq__结合);(3)

__nonzero__(self):调用bool()时使用;

__dir__(self):调用dir()时使用;

2.3.访问控制

__getattr__(self, name):访问不存在的属性时调用;

__delattr__(self, name):删除name属性;

__setattr__(self, name, value):设置name属性;

__getattribute__:属性访问拦截器;

2.4.容器相关

__len__(self):返回容器的长度;

__getitem__(self, key):使用self[key]时调用;

__setitem__(self, key):使用self[key]赋值时的调用;

__iter__(self, key):返回当前容器的一个迭代器;

__reversed__(self):返回一个反转的序列;

__contains__(self, item):使用in和not in时调用;

__missing__(self ,key):访问字典不存在的键时调用;

2.5.类关系

__instancecheck__(self, instance):检查实例;

__subclasscheck__(self, subclass):检查子类;

2.6.上下文管理器(5)

__enter__:返回值绑定到指定的as语句;

__exit__:退出时的清理代码;

2.7.描述符协议

__set__(self, obj, type=None):设置属性;

__get__(self. obj):获取属性;

__delete__(self. obj):对属性调用del时调用

2.8.比较

__cmp__(self, other):比较操作符的行为;(7)

__gt__(self,other):大于;

__lt__(slef,other):小于;

__ge__(slef,other):大于或者等于;

__le__(slef,other):小于或者等于;

__eq__(slef,other):等于;(3)

__ne__(self, other):不等于;

2.9.调用

__call__(self, *args):把实例对象作为函数调用;

2.10.拷贝

__copy__(self):浅拷贝;(4)

__deepcopy__(self, memodict=):深拷贝;(4)

2.11.Pickling(序列化) (8)

__getnewargs__(self):反序列化时传递__new__参数;

__getstate__(self):在序列化存储状态;

__setstate__(self):在反序列化时传递状态;

__reduce__(self):序列化扩展类型(C语言API);

__reduce_ex__(self):__reduce__的兼容模式;

2.12.迭代器协议(6)

__next__:返回下一个元素;

__iter__:返回迭代器本身;

2.13.操作符

A. 一元操作符

__pos__(self):取正;

__neg__(self):取负;

__abs__(self):绝对值;

__invert__(self):取反;

__round__(self, n):四舍五入;

__floor__(self):向下取整;

__ceil__(self):向上取整;

__trunc__(self):取距离零最近的整数;

B.算术操作符

__add__(self, other):加法;

__sub__(self, other):减法;

__mul__(self, other):乘法;

__floordiv__(self, other)://操作符的整数除法;

__div__(self, other):/操作符的除法;

__truediv__(self, other):_true_除法;

__mod__(self, other):取余;

__divmod__(self, other):divmod;

__pow__:**;

__lshift__(self, other):左移位运算符<<;

__rshift__(self, other):右移位运算符>> ;

__and__(self, other):按位与运算符&;

__or__(self, other):按位或运算符|;

__xor__(self, other):按位异或运算符^;

C.反射算术运算符

D.增强赋值运算符

E.类型转换操作符

java通过继承父类或者实现接口来获取不同的方法;

1.Object

getClass():获取class对象;

toString():在打印类/与字符串连接时默认调用;(1)

equals():调用对象的equals方法时默认调用,通常与hahCode联合使用;(3)

hashCode():生成对象的hash值;(3)

clone():对象克隆;(4)

finalize(): 垃圾回收时执行清理动作, 不建议操作;(2)

notify():唤醒线程

notifyAll():唤醒所有线程;

wait():线程等待;

2.容器相关

Collection接口,Map接口,List接口,Set接口

3.AutoCloseable接口(5)

close():退出时的清理代码;

4.Itreator接口(6)

hasNext():是否还有元素;

next():返回下一个元素;

remove():移除迭代器返回的最后一个元素;

5.Comparable接口(7)

compareTo():比较方法;

6.Spliterator接口

tryAdvance(Consumer action):是否还有元素;

trySplit():切分元素;

estimateSize():估计还有多少元素;

characteristics():特性集的编码;

7.Serializable接口 (8)

方法无:可序列化标记;

 

 

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐