登录/注册
tom
1857
占位
1
占位
0
浏览量
占位
粉丝
占位
关注
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 old
My name is jerry, I am 20 years old

 

类对象

什么是类对象

  • 声明了一个类,它就是一个类对象
  • 程序运行时,在内存中就会创建一个类对象,

有且只有一个

  • 类对象也有自己的属性和方法,分别叫做:类属性、类方法(后面详解)

 

打印下类对象看看

# 类对象
class person:
pass
print(person)
print(id(person))
# 输出结果
<class '__main__.person'>
140485598521200

打印的就是一个类对象和内存地址

 

类对象支持两种操作

  1. 属性引用
  2. 实例化

 

属性引用

  • 使用 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- 4435237568
p1 fun- 4435260032

init-p2 4435237472

p2- 4435237472
p2 fun- 4435260032 

```

可以看到,两个实例对象调用的实例方法是同一个内存地址

 

原文: https://www.cnblogs.com/poloyy/p/15178456.html

暂无评论