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,类能不能调用对象的属性? 不能