#了解一下最基础的类的学习和面向对象的编程与一些引申知识。(self与_init_的用法)
'''
建造生物
类名:生物(creature)
属性(变量):名字(name) 年龄(age) 性别(sex)
方法(函数):呼吸(breath) 行走(move) 进食(eat) 交配(mate)
类名:鸡(cook)
属性(变量):颜色(color)
方法(函数):下蛋(lay)
类名:人(human)
属性(变量):电话(tel) 住址(address) 学历(degree)
方法(函数):学习(study) 工作(work) 自我介绍(introduce)
'''
class creature(object):
def __init__(self,name,age,sex,**kw): #'__init__'用于初始化属性
self.name = name
self.age = age
self.sex = sex
for k,w in kw.items(): #**kw表示任意常数,这个for 循环是必须的,由于设置属性值。
setattr(self,k,w) #setattr 函数对应函数 getatt(),用于设置属性值,该属性必须存在。object -- 对象。 setattr(object, name, value)
# name -- 字符串,对象属性。
# value -- 属性值。
def breath():
print('Breathing!!')
def move():
print('Step by!!')
def eat():
print('Hulk eating!')
def mate():
print('Love!!')
class cook(creature): #继承的用法!
def __init__(self,name,age,sex,color):
super(cook, self).__init__(name,age,sex) #一定要用 super(cook, self).__init__(name, age,sex) 去初始化父类,否则,继承自 creature 的 cook 将没有 name 和 age sex
self.color = color
def lay():
print('A egg born!')
class human(creature):
def __init__(self,name,age,sex,tel,add,degree):
super(human, self).__init__(name,age, sex)
self.tel = tel
self.add = add
self.degree = degree
def study(self): #这里以self为函数参数的原因是因为此函数需要使用类本身定义的属性。
print('{0} is studying!'.format(self.name)) #如果没有self的话就不知道这个属性是何归属(因为python不和C++一样有public 和 private 之分)。
def work():
print('Working!!')
def introduce(self):
print(f'My name is {self.name}. \n My tel is {self.tel}.')
#这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
def main():
creature.breath()
cook.lay()
h = human('dick',11,'man',13807004070,"BackerStreet 1001",'High school')
h.study()
print(f'{h.name} is a {h.sex}')#fstring 用法
h.introduce()
M = creature('M',3,'female',tall = '18cm')
print(f'{M.name} is {M.tall} tall.')
#当我们得到一个变量时,如何判断他的信息?
print(type(M)) #可以用 type() 函数获取变量的类型,它返回一个 Type 对象.
print(dir(M)) #可以用 dir() 函数获取变量的所有属性. dir()返回的属性是字符串列表,如果已知一个属性名称,要获取或者设置对象的属性,就需要用 getattr() 和 setattr( )函数了
if __name__ == '__main__':
main()
网友评论