面向对象

# 自定义类
class Persion:
    country = 'China'   # 也是创造属性,创造一个只要是这个类就一定有的属性,叫做类属性,也叫静态属性

    # self 其实就是一个可以存储可多属性的大字典,self存储属性
    def __init__(self, *args):  # 构造函数  self对象,本质self其实是一个字典,将字典填充好后,也就是构造对象的过程,然后将self返回
        self.name = args[0]     # self.name 的name是属性
        self.hp = args[1]
        self.aggr = args[2]
        self.sex = args[3]
        # print(self.__dict__)    # {'hp': 1000, 'aggr': 100, 'name': '狗剩儿', 'sex': 'boy'}
    def walk(self, n): # 类的方法,类方法一般情况下必须含有self参数,并且在第一个位置,后面可以传其他参数
        print('%s zou zou zou le %s bu' % (self.name , n))



why = Persion('狗剩儿', 1000, 100, 'boy')  # 调用了构造函数,构造完self后,self返回给了why,实例化的过程
print(why.hp)

print(why.__dict__) # 查看所有属性值
# Persion里有个walk名字
print(Persion.__dict__) # {'walk': <function Persion.walk at 0x000001EE60883510>, '__weakref__': <attribute '__weakref__' of 'Persion' objects>, '__init__': <function Persion.__init__ at 0x000001EE60883730>, '__doc__': None, '__module__': '__main__', '__dict__': <attribute '__dict__' of 'Persion' objects>}
Persion.walk(why, 5)   # 狗剩儿 zou zou zou le 5 bu   # 此种方法调用,类名.方法名(对象名调用),必须传入指定对象名
why.walk(5)  # 狗剩儿 zou zou zou le 5 bu  此种方法不需要传self,等价于 Persion.walk(why)
print(Persion.country)  # China  通过类名可以调用类中的静态属性,不需要实例化对象就可以查看类的静态属性
why.age = 83    # 增加了一个属性age = 83,可以增加属性
print(why.age)  # 83

# 对象能做的事:
    # 查看与操作属性(增删改)
    # 调用方法
    # __dict__对于对象的增删改查操作,都可以通过字典的语法操作,但一般不这么进行操作,而是why.name = 'haha'方式操作
        # why.__dict__['name'] = 'haha'(本质)
        # 对象的增删改查操作都可以参考字典的方式进行操作

# 类名能做的事情
    # 可以实例化一个对象
    # 能通过类名调用方法,但是需要指定对象参数,不建议这么用
    # 调用类中的静态属性
    # 类的__dict__,也就是类中的名字只能看,不能修改


# 不管是类名,还是对象,都可以调用.__dict__
    # 类名.__dict__得到的是类的所有名字,包括函数名(都是键值对形式)。
    # 对象名.__dict__,得到的是对象的所有属性值(键值对)
    # 其实都可以用操作字典的方式进行访问

 

posted @ 2018-09-25 22:22  _小溢  阅读(147)  评论(0)    收藏  举报