python学习7_1面向对象基本概念和用法
Posted cooky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习7_1面向对象基本概念和用法相关的知识,希望对你有一定的参考价值。
定义类时会立刻触发类体代码的运行,产生名称空间
class OldBoySchool: school = ‘oldBoy‘ def choose_course(self): print(‘is choosing course‘)
访问类的属性
print(OldBoySchool.school)
访问类的方法,对类来说,类方法就是普通的方法
print(OldBoySchool.choose_course(‘123‘))
stu1 = OldBoySchool() stu2 = OldBoySchool() #所有对象和类变量的内存地址都一样 print(id(stu1.school), id(stu2.school),id(OldBoySchool.school))
#对象的绑定方法地址一样,对象和类的方法地址不一样 print(id(stu1.choose_course), id(stu2.choose_course),id(OldBoySchool.choose_course)) #2289801247880 2289801247880 2289804409440
重新定义一个类
class OldBoySchool2: school = ‘oldBoy‘ #调用类的时候自动出发执行 stu1 def __init__(self, name, age, sex): self.name = name # stu1.name self.age = age self.sex = sex def choose_course(self): print(‘%s is choosing course‘%self.name)
调用类发生了两件事
1、会产生一个空对象
2、会触发类中__init__函数的运行,将空对象连同括号内的参数一同传入
stu1 = OldBoySchool2("jack", 18, "male") stu2 = OldBoySchool2("tom", 19, "female")
对象名称空间中存在自己独有的属性
print(stu1.__dict__) # {‘name‘: ‘jack‘, ‘age‘: 18, ‘sex‘: ‘male‘} print(stu2.__dict__) # {‘name‘: ‘tom‘, ‘age‘: 19, ‘sex‘: ‘female‘}
先从自己的名称空间中找,再去类的名称空间中去找
print(stu1.name) #自己的名称空间 print(stu1.school) #类的名称空间
类的数据属性是共享给所有对象用,大家的内存地址都一样
print(id(stu1.school)) print(id(OldBoySchool2.school))
相当于stu1添加了一个school属性,不影响类的属性
stu1.school = ‘xxx‘
类中定义的函数是绑定给对象用的,称之为绑定方法
用原有的函数需要传自身对象,比较麻烦,所以用绑定方法,就不用传自身对象了
print(id(OldBoySchool2.choose_course)) # 2492997074320 print(id(stu1.choose_course)) # 2492993911944 print(id(stu2.choose_course)) # 2492993911944
调用方法
stu1.choose_course() # jack is choosing course stu2.choose_course() # tom is choosing course
面向对象举例:
class Mysql: def __init__(self, host, port, db, charset): self.host = host self.port = port self.db = db self.charset = charset def exc1(self, sql): conn = connect(self.host, self.port, self.db, self.charset) conn.execute(sql) return XXX def exc2(self, proc_name): conn = connect(self.host, self.port, self.db, self.charset) conn.call_proc(proc_name) return XXX obj=Mysql(‘1.1.1.1‘,3306,‘db1‘,‘utf-8‘) obj.exc1(‘select * froom xxx‘) obj.exc2(‘p1‘)
以上是关于python学习7_1面向对象基本概念和用法的主要内容,如果未能解决你的问题,请参考以下文章
# 20182333 2019-2020-1 《数据结构与面向对象程序设计》第23周学习总结
Python 2019/7/24 面向对象概念 类和对象 对象初始化__init__ 绑定与非绑定
python学习8_1 面向对象(继承多态封装)以及零散概念(组合,property,绑定方法与非绑定方法,反射,内置函数)