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
存放对象属性的位置:
-
一个是对象,因为某些对象的具体属性不一样,要存放到对象中
-
另一个是类,因为某些对象的某个属性全部一样,直接存放到类中,不需要重新定义
示例:
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
访问顺序为 对象-->> 类
-
在创建一个类的时候,会产生相应的名称空间,存储类中名称和值绑定的关系
-
对象也一样