贡献者: addis
一个例子
# 定义 person 类
class person(): # 括号可以省略
def __init__(self, name, age): # 构造函数(只能有一个)
self.name = name
self.age = age
def show(self):
print("name is", self.name)
print("age is", self.age)
# 生成对象
p1 = person("jason", "30")
p2 = person("justin", "28")
# 调用成员函数
p1.show();
p2.show();
运行结果
name is jason
age is 30
name is justin
age is 28
另一个例子:来定义一个平面点类
class point:
"""这里是 point.__doc__ 的内容"""
def __init__(self, x, y):
self.x = x
self.y = y
# 用于 print()
def __str__(self):
return "({0}, {1})".format(self.x, self.y)
# 用于不加分号自动显示(一般是构造该对象的命令), 也可以用 repr(obj) 直接调用
def __repr__(self):
return "point({0}, {1})".format(self.x, self.y)
def __add__(self, other): # 算符 +, self 必须是第一个变量
if isinstance(other, point):
return point(self.x + other.x, self.y + other.y)
else:
return point(self.x + other, self.y + other)
# 调用可以直接用 p.len
, 省略括号, 只读
@property
def len(self):
return self.x**2 + self.y**2
dir(类名)
或者 dir(obj)
查看其所有性质(attributes)
vars(obj)
查看对象的所有数据成员,等效地也可以用 teddy.__dict__
obj.__module__
查看对象所在的模块,如果不在模块中定义的,就返回 '__main__'
。如果是内建类型,就返回 'builtins'
import inspect
模块可以检查 python 对象的方方面面,各种性质。具体见 dir(inspect)
。
__add__
(+
),__sub__
(-
),__mul__
(*
),__truediv__
(/
),__floordiv__
(//
),__mod__
(%
),__lshift__
(<<
),__rshift__
(>>
),__and__
(&
),__or__
(|
),__xor__
(^
),__invert__
(~
),__lt__
(<
),__le__
(<=
),__eq__
(==
),__ne__
(!=
),__gt__
(>
),__ge__
(>=
),__getitem__(self, i)
(对象[i]
),__setitem__(self, i, val)
(对象[i] = 值
),__iter__(self)
(迭代器 iter()
),__next__(self)
(迭代器 next()
)
__radd__(self, other)
可以定义 other + self
(当 other
具有不同类型时会被调用)。
x[start:end:step]
中,start:end:step
等效于 slice(start, end, step)
,类型是 slice
. 如果三个中哪个被省略了,哪个就是 None
。注意 start:end:step
不能单独使用。
getattr()
函数可以获取对象成员
delattr()
删除成员
hasattr()
检查是否存在成员
setattr()
改变成员
class 类名(基类名):
定义派生类,类名.__base__
查看基类。最底层的基类都是 object