类与对象初识

#面向对象设计(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 类名(父类): #当加括号时,括号里是父类,表示继承
类体
posted @ 2019-05-06 22:38  saber゛  Views(216)  Comments(0)    收藏  举报