【1.95】面向对象-实例化--6

1

#属性  数据属性   函数属性(方法)
class Chinese:
    "这是一个中国人的类"
    def  __init__(self,name,age,gender):
        print("start")
        self.mingzi=name
        self.nianlin=age
        self.xinbie=gender
        print("end")
       # return dic                             这里也不用return

    dang = "gcd"
    def sui_di_tu_tan():
        print("正在吐痰")
    def cha_dui(self):
        print("%s 正在插队"%self.mingzi)
        
        #print("%s 正在插队"%self["mingzi"])   这个是函数中的写法,但是class  使用self 后  实例化p1 就直接可以访问字典的键  
        #print (p1.mingzi)     #yaoming
        
    # return __init__(self,name,age,gender)   因为是类 class  就不用return   class 已经帮我们return了


#实例化  就只有数据属性 没有函数属性
p1 = Chinese("yaoming",18,"male")
print(p1)   #  <__main__.Chinese object at 0x018CA950>   就是一个字典对象
print(p1.__dict__)     #{'mingzi': 'yaoming', 'nianlin': 18, 'xinbie': 'male'}
# 实例化后就是一个字典


print(p1.dang)  # gcd  作用域  就是在自己的属性字典里面找  然后又去class中找,找不到就报错

print (p1.__dict__["mingzi"])   #yaoming
print (p1.mingzi)     #yaoming


p1.cha_dui()    #yaoming 正在插队

 

只要是class   直接就加载 代码 然后自己去找 init 函数  然后运行 实例化   

实例化的对象 只有数据属性  没有函数属性 

然后实例化后就是一个字典对象  然后可以通过对象加 dian . JIAN    p1.mingzi  就可以访问你传入的name 了

对于函数的访问也就是这样 用 

作用域在类内 找不到就报错 

我们这里就访问 dang  访问p1 自己的 键   访问class 中的函数 

但是这里 

#p1.sui_di_tu_tan()   #TypeError: sui_di_tu_tan() takes 0 positional arguments but 1 was given
说明 就是 class 实例化后 就会在访问函数 后 自己给函数传递一个参数 self 就是 p1 给了 sui_ditu_tan(p1)



我们看看 self 就是实例化后的 p1

面向对象编程 就是节约了大量的函数属性 数据属性也是建立后才有的 节约内存 节约空间
实例化的 也只有数据属性
posted @ 2016-05-06 23:10  科学小怪癖  阅读(96)  评论(0)    收藏  举报