面向对象,类和对象访问

类和对象

1,对象的命名规范

按照大驼峰体书写,每个单词的开头大写:

class Person:
pass

2,在类中描述对象的特征(属性)

class Person:
name = '张三'#用变量来描述属性
sex = 'man'
age = 10

取一个对象(通过调用一个类,也称之为实例化或常创建对象):

obj = Person()
print(obj)
#输出的内容是一个内存地址 : <__main__.Person object at 0x000001FC35FB12E8>

解释内存地址:模块名为main,包含一个Person类,通过Person类产生了对象,

地址为0x000001FC35FB12E8

使用对象的特征取值:

obj.name
obj.sex
obj.age
#输出结果为 张三,man,10

 

3,对象的定义和调用

定义类和类中的对象:

class Student:
number = 007
  name = '盖伦'
  sex = 'man'
  age = 18

stu1 = Student()#相当于调用类,会返回一个内存地址,因为没有具体的对象
stu2 = Student()

print(stu1)
print(stu2)
<__main__.Student object at 0x000002567C4B19E8>
<__main__.Student object at 0x000002567C2D9EF0>

每个对象的内存地址都是不同的,这是因为在创建对象时,计算机会申请一个内存空间,并将对象中的内容

存进去,类也是一样的,但是id是相同的,这是因为调用的是同一个声明

print(stu1.name)
print(stu2.name)
#返回的值一样
print(id(stu1.name))
print(id(stu2.name))
#id也是一样的,因为这是同一份数据

 

为对象单独指定属性:
stu1.name = '赵信'
stu2.name = '钟无艳'

print (stu1.name)
print (stu2.name)

#最新定义的的属性优先查找,这涉及到对象的查找

每个对象的name属性都不同,则意味着需要给每个对象单独指定name
存放对象属性的位置:
  1. 一个是对象,因为某些对象的具体属性不一样,要存放到对象中

  2. 另一个是类,因为某些对象的某个属性全部一样,直接存放到类中,不需要重新定义

示例:

class Student:

  school = "Tsinghua LOL"#一个学校的学生,学校属性是一样的
   
  number = '007'
  name = '盖伦'
  sex = 'man'
  age = 18

 
获取一个对象中的内容:

通过dict内置函数,可以获取一个对象中包含的内容

print(stu1.__dict__)       #对象中的内容
print(Student.__dict__)     #类中的内容

 

4,对象的访问顺序

当对象和类中有值时,优先访问对象中的:

class Car:
  c_type = 'Tesla'
  color = 'res'
  price = 500000

c1 = Car()
c2 = Car()

print(c1.__dict__)
print(c1.c_type)
输出内容 : {} , Tesla

 

当对象中需要查找的内容不存在时,则到类中去访问:
c1.c_type = '911'
print(c1.c_type)#c1是自定义的
print(c2.c_type)#c2是类中定义的
输出内容 :911 , Tesla

 

访问顺序为 对象-->> 类

  • 在创建一个类的时候,会产生相应的名称空间,存储类中名称和值绑定的关系

  • 对象也一样

类还有另一个作用,就是 作为对象的模板,所有属于同一个类的对象,都具备类的公共内容

猜你喜欢

转载自www.cnblogs.com/wang-kai-1994/p/10167166.html