#面向对象设计(ood)
def person(name,age,action): #做一个对象和行为关联性,通过作用域来限制其他的对象不可调用该对象的行为
#初始化设置
def init(name,age,action): #风湿理论
per = { #字典存放对象和行为
"name":name,
"age":age,
"action":action,
"chi":chi, #将行为放到字典中
"xuexi":xuexi
}
return per
#设计行为
def chi(person):
print("%s 正在%s" %(person["name"],person["action"]))
def xuexi(person):
print("%s 正在 %s" %(person["name"],person["action"]))
return init(name,age,action)
p1 = person("sjy","25","chishuiguo")
p1["chi"](p1)
p2 = person("oct","26","kanshu")
p2["xuexi"](p2)
#面向对象编程(oop)
class Person: #使用class类方法,做面向对象设计
guoji = "chinese"
def __init__(self,name,age,action):
self.mingzi = name #设置自身属性,注意是等于号
self.age = age
self.action = action
def chi(self):
print("%s 正在 %s" %(self.mingzi,self.action))
def xuexi(self):
print("%s 正在 %s" %(self.mingzi,self.action))
pp = Person("sjy","25","chifan") #实例化--->就是调用__init__(self,name,age,action)
pp.chi() #调用实例化得到的内容:类名.属性
#类的增删改查
#查看
print(pp.mingzi) #调用实例化后得到的内容
print(pp.guoji) #调用实例化后的内容,是在class类中作用域查找数据属性
#修改
Person.guoji = "CHINESE" #修改类属性
print(pp.guoji)
#增加
Person.mingzu = "han" #增加类属性
print(Person.mingzu)
#删除
del Person.mingzu #删除
#实例化后,调用属性,先在实例属性中查找,再到类中属性查找
print(dir(Person)) #查看属性名,放在一个列表中
print(Person.__dict__) #查看属性字典
#添加函数
def eat_food(self):
print("%s eat" %self.mingzi)
Person.eat = eat_food #类里增删改查函数,与数据属性增删改查类似
pp.eat()
# 修改
def test(self):
print("xiugai")
Person.xuexi = test #修改,将定义好的函数赋值给原类中的函数
pp.xuexi() #注意调用时,还是调用原函数名,因为修改是将修改的内容赋值给原函数,而不是建新函数
#实例(对象)属性的增删改查
#查看
print(pp.guoji)
pp.chi()
#增加
pp.age = 33
print(pp.age)
def tt(self):
print("这是来自实例的函数属性")
pp.tt = tt
pp.tt("x") #一般不用实例添加函数,因为这种情况class不会自动传self
#修改,不要修改底层的字典__dict__
pp.age = 25
print(pp.age)
#删除
del pp.age
print(pp.__dict__)
#类:一种数据结构,描述一类事物,数据和行为的结合
包含数据属性和函数属性
#对象:一个具体的事物,拥有属性和动作的具体事物
对象只有数据属性,调用的函数属性都是类的函数属性
#实例化:由类产生对象的过程,就是在调用__init__
声明一个类,当查找类和对象(实例)的属性时,只能在类中寻找,通过 . 都是属性调用,实例查找最多到类
在类中定义内容都是放在类字典中,在__init__中定义内容,都是放在实例字典中,注意是有两个字典
修改实例字典不会影响类字典中的属性
注意只是查找变量时,即不通过 . 调用时,不会从类和实例的字典中查找,即从类外查找
格式:
class 类名: #注意和函数的区别,类名后面不加()
类体
def __init__(self,name):
class 类名(父类): #当加括号时,括号里是父类,表示继承
类体