python学习笔记——5. 类
程序员文章站
2024-03-22 17:55:28
...
# 定义一个继承object的类
class Human(object):
# 类属性,被所有此类的实例共用。
species = "H. sapiens"
# 构造方法,当实例被初始化时被调用。注意名字前后的双下划线,这是表明这个属性或方法对Python有特殊意义,但是允许用户自行定义。
# 你自己取名时不应该用这种格式。
def __init__(self, name):
# 将参数分配给该实例对象的name属性
self.name = name
# 实例方法,第一个参数总是self,就是这个实例对象
def say(self, msg):
return "{name}: {message}".format(name=self.name, message=msg)
# 类方法,被所有此类的实例共用。第一个参数是这个类对象。
@classmethod
def get_species(cls):
return cls.species
# 静态方法。调用时没有实例或类的绑定。
@staticmethod
def grunt():
return "*grunt*"
# 构造一个实例
i = Human(name="Ian")
print(i.say("hi")) # 印出 "Ian: hi"
j = Human("Joel")
print(j.say("hello")) # 印出 "Joel: hello"
# 调用一个类方法
i.get_species() # => "H. sapiens"
# 改一个共用的类属性
Human.species = "H. neanderthalensis"
i.get_species() # => "H. neanderthalensis"
j.get_species() # => "H. neanderthalensis"
# 调用静态方法
Human.grunt() # => "*grunt*"
#写一个支持迭代的类
class Iterable:
def _inti_(self, x):
self.x = x
def __iter__(self):
return self
def _next_(self):
self.x + 1
return self.x
#Iterable既是一个可迭代对象(因为它实现了__iter__方法),又是一个迭代器(因为实现了__next__方法)。
# 实例变量x用户维护迭代器内部的状态。
# 每次调用next()方法的时候做两件事:为下一次调用next()方法修改状态, 为当前这次调用生成返回结果