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,绑定方法与非绑定方法,反射,内置函数)

Python_Day7_面向对象学习

2021年最新Python讲义:面向对象(OOP)基本概念

python 学习 [day7]面向对象