Fork me on GitHub

初识面向对象

class Person: # 注意class 与 def 的不同   $$$  Person——》类名
    country = 'China'         # 创造了一个只要是这个类就一定有的属性
                              # 叫做类属性 也称静态属性 不会随对象的创建而改变
    def __init__(self,*args):  # __init__ --》初始化方法 self是对象,是一个必须传的参数
        print(self.__dict__)  # self就是一个可以储存很多属性的大字典
        self.name = args[0]   # 只不过与def语法相比往字典里添加属性的方式发生了一些变化
        self.hp = args[1]
        self.aggr = args[2]
        self.sex = args[3]
        print(self.__dict__)
        print(id(self))
    # 现在self里只有属性,下面再定义方法
    def walk(self,n):         # self可以改成其他名称的参数,它只是一个局域变量名,结果是不变的  
                              # 若函数写到class里,就成了方法,一般情况下必须传self参数,且必须写在第一个
        print('走走走')
        print('%s走走走,走了%s步' % (self.name,n))
 
print(Person.country) # 类名 可以查看类中的属性,不需要实例化就可以查看

alex = Person('狗剩儿',100,1,'不详') # '狗剩儿',100,1,'不详' 赋给*args  $$$$ 实例化:调用类,然后拿到对象alex的过程
                                     # 
print(alex.__dict__) # 证明self就是alex ,alex 和 self 其实一样,是字典
print(id(alex))      # self 和 slex 的ID 一样

print(alex.name)     # 查看属性值

print(Person.__dict__) # 发现有刚刚再Person类下定义的walk方法 并用它查看所有属性
print(Person.__dict__['country'])
print(alex.__dict__)

alex.__dict__['name'] = '二哥'
print(alex.__dict__)
print(alex.name)
alex.name = '二哥'
print(alex.name)

Person.walk(alex,5)      # 调用方法 类名.方法名(对象名称)
alex.walk(5)            # alex.walk = Person.walk(alex)  即 对象.方法名()

# 对象 = 类名()
# 过程:
     # 类名Person(),首先会创造一个alex对象 ,创建了一个self变量(创建class时,就已经有self了)
     # 调用init方法,类名括号里的参数会被这里的*args接受
     # 执行init方法
     # 返回self给对象alex,而不用return ,--》def 与 class 的不同
# 对象能做的事:
     # 查看属性 
     # 调用方法
     # __dict__ 对于对象的增删改查操作都可以通过字典的语法,但最好还是通过属性修改,如alex.name = '二哥'
# 类名能做的事:
     # 实例化
     # 调用方法
     # __dict__ 对于类中的名字只能看不能操作
  • 大致执行过程

posted @ 2019-04-21 10:18  chauncylii  阅读(133)  评论(0编辑  收藏  举报