面向对象【林老师版】:属性查找(四)

 本节内容

1、产生对象

2、类中的数据属性

3、类中的函数属性

4、补充说明

一、产生对象

1、实现代码

x='global'
class LuffyStudent:
    school='luffycity'

    def __init__(self,name,sex,age):
        self.Name=name
        self.Sex=sex
        self.Age=age

    def learn(self,x):
        print('%s is learning %s' %(self.Name,x))

    def eat(self):
        print('%s is sleeping' %self.Name)

stu1=LuffyStudent('王二丫','女',18)
stu2=LuffyStudent('李三炮','男',38)
stu3=LuffyStudent('张铁蛋','男',48)

print(stu1.__dict__)
print(stu2.__dict__)
print(stu3.__dict__) 

2、输出

{'Name': '王二丫', 'Sex': '女', 'Age': 18}
{'Name': '李三炮', 'Sex': '男', 'Age': 38}
{'Name': '张铁蛋', 'Sex': '男', 'Age': 48}

对象:特征与技能的结合体
类:类是一系列对象相似的特征与相似的技能的结合体

二、类中的数据属性

1、代码

print(LuffyStudent.school,id(LuffyStudent.school))

print(stu1.school,id(stu1.school))
print(stu2.school,id(stu2.school))
print(stu3.school,id(stu3.school))

2、输出

luffycity 12235696
luffycity 12235696
luffycity 12235696
luffycity 12235696

类中的数据属性:是所有对象共有的是所有对象共有的

三、类中的函数属性

1、类中的函数属性:是绑定给对象使用的

1、代码

print(LuffyStudent.learn)
LuffyStudent.learn(stu1)
LuffyStudent.learn(stu2)
LuffyStudent.learn(stu3)

2、输出

<function LuffyStudent.learn at 0x0000000001151268>
  File "F:/s13/day07/5-属性查找.py", line 21, in <module>
    LuffyStudent.learn(stu1)
TypeError: learn() missing 1 required positional argument: 'x'

2、绑定到不同的对象是不同的绑定方法

1、代码

print(stu1.learn)
stu1.learn(1) #learn(stu1,1)
print(stu2.learn)
print(stu3.learn)

2、输出

<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x00000000010E8A58>>
王二丫 is learning 1
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x00000000010E8A90>>
<bound method LuffyStudent.learn of <__main__.LuffyStudent object at 0x00000000010E8AC8>>

3、对象调用绑定方式时,会把对象本身当作第一个传入,传给self

1、代码

stu2.learn(2)
stu3.learn(3)

stu1.x='from stu1'
LuffyStudent.x='from Luffycity class'

print(stu1.__dict__)
print(stu1.x)

2、输出

李三炮 is learning 2
张铁蛋 is learning 3
{'x': 'from stu1', 'Age': 18, 'Sex': '女', 'Name': '王二丫'}
from stu1 

4、小结

1、是绑定给对象使用的,绑定到不同的对象是不同的绑定方法

2、是绑定给对象使用的,绑定到不同的对象是不同的绑定方法,

3、对象调用绑定方式时,会把对象本身当作第一个传入,传给self

四、补充说明

  • 站的角度不同,定义出的类是截然不同的;
  • 现实中的类并不完全等于程序中的类,比如现实中的公司类,在程序中有时需要拆分成部门类,业务类等;
  • 有时为了编程需求,程序中也可能会定义现实中不存在的类,比如策略类,现实中并不存在,但是在程序中却是一个很常见的类。
原文地址:https://www.cnblogs.com/luoahong/p/9915651.html