Python
tom 2021-09-18 17:37:12 2021-09-18 110 0
什么是对象和类
https://www.cnblogs.com/poloyy/p/15178423.html
Python 类
类定义语法
最简单的类定义看起来像这样
class ClassName: <statement-1> . . . <statement-N>
类定义与函数定义
(def 语句
) 一样必须被调用执行才会起作用
类命名空间
- 当定义类时,会创建一个新的命名空间,也是一个局部作用域
- 上面的类定义栗子里,statement-1 到 statement-N 就是这个类的命名空间
类的取名建议规则
类名中的所有单词首字母要大写,采用驼峰命名法(例
Game
Case )的书写方式
最简单的一个类
class Dog: pass
- 这个类没有属性也没有方法
- 实际应用中,很少会创建空类,因为空类没有任何实际意义
包含属性、方法的一个类
class Person: def introduce(self): print('My name is %s, I am %d years old' % (self.name, self.age))
Person 类,有一个方法 introduce,有两个属性 name、age
通过 Person 类创建两个实例对象
# 对象一tom = Person()# 对象属性tom.name = 'tom'tom.age = 10# 对象二jerry = Person() # 对象属性 jerry.name = 'jerry'jerry.age = 20# 调用对象的方法tom.introduce()jerry.introduce()# 输出结果My name is tom, I am 10 years oldMy name is jerry, I am 20 years old
类对象
什么是类对象
- 声明了一个类,它就是一个类对象
- 程序运行时,在内存中就会创建一个类对象,
有且只有一个
- 类对象也有自己的属性和方法,分别叫做:类属性、类方法(后面详解)
打印下类对象看看
# 类对象class person: passprint(person)print(id(person))# 输出结果<class '__main__.person'>140485598521200
打印的就是一个类对象和内存地址
类对象支持两种操作
- 属性引用
- 实例化
属性引用
- 使用 Python 所有属性引用的标准语法:
Obj.name
有效的属性名称是类对象被创建时存在于类命名空间中的所有名称
class MyClass: """A simple example class""" i = 12345 def f(self): return 'hello world'
有效的属性引用
- MyClass.i:返回一个整数
- MyClass.f:返回一个函数对象
- MyClass.__doc__:返回当前类的文档字符串
print(MyClass.i)print(MyClass.f)print(MyClass.__doc__)
输出结果
12345
<function MyClass.f at 0x10f43f310>A simple example class ### 实例化实例化其实就是调用类对象,从而创建一个实例对象
c = MyClass()
创建类的新实例并将此对象分配给局部变量 c ### 实例对象### 什么是实例对象* 通过类实例化操作生成对象就是实例对象* 一个类可以多次实例化,生成多个实例对象
实例对象
class person:
pass实例化:类名()
p1 = person()
p2 = person()p3 = person()print(p1, id(p1))print(p2, id(p2))print(p3, id(p3))输出结果
<__main__.person object at 0x10e42b8b0> 4534220976
<__main__.person object at 0x10e42b880> 4534220928<__main__.person object at 0x10e42b850> 4534220880三个 person 类实例对象,分别有自己独立的内存地址 ### 常说的面向对象编程是什么1. 设计类1. 创建类实例对象1. 实例对象调用方法 ### 创建实例对象详解1. 在内存中为对象分配空间1. 调用初始化方法 __init__ 为对象初始化1. 对象创建后,内存中就有一个类的实例对象了![](https://daimanet.oss-cn-beijing.aliyuncs.com/2021/2021-09/2021-09-18/aeaf77dec007407685ff775d6bfcc9c4_1.png?x-oss-process=style/watermark)由此可见,一个类可以有很多个对象,每个对象都有属于自己的属性、方法;* 创建出来的 对象 叫做 类的 实例对象* 创建对象的行为叫做 实例化* 对象的属性 叫做 实例属性* 对象调用的方法 叫做 实例方法__init__、实例属性、实例方法后续详解 ### 知识点* 每个对象都有自己独立的内存空间,保存自己的属性* 但是实例方法在内存中都只有一个,实例方法中的 self 就是实例对象的引用,当对象调用实例方法时,会默认把实例对象传给方法内部如果不懂的话,看看下面代码的输出就知道啦; id() 是用于获取对象的内存地址
class person():
def init(self, name): self.name = name print(f"init-{self.name} ", id(self))def test(self): print(f"test-{self.name} ", id(self))
p1 = person("p1")
print("p1-", id(p1))print("p1 fun-", id(p1.test))p2 = person("p2")
print("p2-", id(p2))print("p2 fun-", id(p2.test))输出结果
init-p1 4435237568
p1- 4435237568p1 fun- 4435260032init-p2 4435237472
p2- 4435237472p2 fun- 4435260032```
可以看到,两个实例对象调用的实例方法是同一个内存地址