python之路day15面向对象的初识

类和对象:

类:具有相同特征,属性或功能的一类事物

对象:类的具体表现,具体的某一个事物

创建一个类:

class A:                #关键字 Class  类名 :  类名首字母大写
    name = 'alex'    #静态属性,静态变量,静态字段
    def fun1(self):    #函数,动态属性,方法
        pass

属性

class Person:   #定义一个person类
    role = 'person' #角色属性
    walk_awy = '直立行走'#行走属性
    def __init__(self,name,age):    #只用来为对象进行初始化操作,给对象封装属性,实例化一个对象是会执行
        self.name = name
        self.age = age
    def walk(self):         #类拥有的走路方法
        print('person is working.....')
    def eat(self):          #类拥有的吃的方法
        print('person is eating...')

类名:

1.查看类中所有属性及方法__dict__  ,单个属性方法

print(Person.__dict__)  #查看类中所有属性及方法
print(Person.__dict__['role']) #查看类的某个属性
print(Person.__dict__['walk'])#查看类的某种方法

#{'__module__': '__main__', 'role': 'person', 'walk_awy': '直立行走', '__init__': <function Person.__init__ at 0x00000207F1012B70>, 
'walk': <function Person.walk at 0x00000207F1012BF8>, 'eat': <function Person.eat at 0x00000207F1012F28>,
'__dict__': <attribute '__dict__' of 'Person' objects>, '__weakref__': <attribute '__weakref__' of 'Person' objects>, '__doc__': None}
#person #<function Person.walk at 0x0000027CA9022BF8>

#一般用到 __dict__查看类中的所有属性及方法,不进行其他操作。

2.查增删改类中某个属性及方法(万能的‘.’)

print(Person.walk_awy) #
Person.sex = ''    #
print(Person.sex)
Person.role = 'human' #
del Person.sex  #

3.操作方法  一般不通过类名操作,用对象操作

 

对象

实例化的过程就是类-------》对象的过程

语法:对象名 = 类名(参数)

obj = Person('alex',18)  #实例化一个对象
print(obj.name)

#alex

实例化过程中内部进行了三个阶段:

1. 在内存中开辟了一个对象空间

2.自动执行__init__方法,并且将对象空间自动传给self参数,建立类对象指针,其它参数手动传入

3.执行__init__方法,给对象空间封装相应的属性

 

对象空间的操作

1.对象查看对象空间所有的属性用__dict__方法
print(obj.__dict__)
#{'name': 'alex', 'age': 18}

2.对象操作对象的某个属性 增删改查 用万能的‘.’
obj.hobby = 'tea'#
print(obj.__dict__)
del obj.hobby#
print(obj.__dict__)
obj.age = 20#
print(obj.__dict__)
#{'name': 'alex', 'age': 18, 'hobby': 'tea'}
#{'name': 'alex', 'age': 18}
#{'name': 'alex', 'age': 20}

3.对象操作类空间的属性只能查
print(obj.walk_awy)
obj.walk_awy = '爬行'   #操作只会在对象空间增加一个属性
#直立行走
#{'name': 'alex', 'age': 20, 'walk_awy': '爬行'}

4.对象操作类空间的方法
print(obj)
obj.walk()
#<__main__.Person object at 0x00000205E3CAA208>
#person is working.....

 

类名称空间和对象名称空间

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

创建一个对象/就会创建一个对象的名称空间,存放对象的名字,称为对象的属性

class Person:   #定义一个person类
    role = 'person' #角色属性
    walk_awy = '直立行走'#行走属性
    def __init__(self,name,age):    #只用来为对象进行初始化操作,给对象封装属性,实例化一个对象是会执行
        self.name = name
        self.age = age
    def walk(self):         #类拥有的走路方法
        print('person is working.....')
    def eat(self):          #类拥有的吃的方法
        print('person is eating...')
teacher = Person('alex',28)
student = Person('lisir',20)

# 1对象为什么能调用类中的属性与方法而且只是调用,不能改变?
# teacher.属性名  先从自己空间去找,没有此属性他会通过类对象指针从类去找,  类中找不到,会从父类去找。
# print(teacher.name)
# teacher.hobby = tea  # 给对象增加一个属性 
# print(teacher.hobby)

# 对象只能查看类中的属性,不能增删改类中的属性。

# 2,类能不能调用对象的属性? 不能

 

 

 

 

 

posted @ 2018-08-23 21:34  罗浮多胜境  阅读(88)  评论(0编辑  收藏  举报