面向对象编程(类

类(class)是一种面向对象计算机编程语言的构造,是创建对象的蓝图,描述所创建的对象共同的属性和方法。
把研究的诸多对象抽象

1 类和对象的关系

人类与张三、李四

在这里插入图片描述

class NanRen: #class,定义关键词  单词首字母大写,多个单词多个大小,不用下划线
    '''
    这是对于人这个类的定义  #类的文档
    '''

    def __init__(self,name):   #初始化方法(有的资料叫构造方法,不准确)双下划线,至少得有self一个参数
        self.name = name
        self.iq = 100
        self.gender = 1 #1:male
        self.age = 18

    def huishuohua(self):   #普通方法,self函数不可少
        return "i am a boy"

zhangsan = NanRen('zhangsan') #类的实例化
print(zhangsan.name)
print(zhangsan.gender)
print(zhangsan.age)
shuohua = zhangsan.huishuohua()
print(shuohua)

zhangsan
1
18
i am a boy

在这里插入图片描述

例:编写程序,判断学生是否完成作业,如果完成,进行表扬,否则进行批评

class Student: 
    def __init__(self, name, grade, subject): #定义一个学生的姓名、年级、科目
        self.name = name
        self.grade = grade
        self.subject = subject
    def do_work(self, time):
        if self.grade > 3 and time > 2: #如果年纪大于3并且做作业时间大于2返回真
            return True
        elif self.grade < 3 and time > 0.5:
            return True
        else:
            return False

class Teacher: #定义一个老师
    def __init__(self, name, subject):
        self.name = name
        self.subject =subject
    def evaluate(self, result = True): 
        if result:
            return "You are great."
        else:
            return "You should work hard"

stu_zhang = Student('zhang', 5, 'math') #实例化张同学,5年级数学
tea_wang = Teacher('wang', 'math') #实例化王老师,数学
teacher_said = tea_wang.evaluate(stu_zhang.do_work(1)) #评估张同学做一个小时作业的结果
print("Teacher {0} said : {1}, {2}".format(tea_wang.name, stu_zhang.name, teacher_said)) #format函数,加上哪个老师对哪个学生说话

stu_li = Student('li', 4, 'phsics')
tea_liao = Teacher('liao', 'phsics')
teacher_said1 = tea_liao.evaluate(stu_li.do_work(5))
print("Teacher {0} said : {1}, {2}".format(tea_liao.name, stu_li.name, teacher_said1))

Teacher wang said : zhang, You should work hard
Teacher liao said : li, You are great.

初始化方法会默认执行

class Foo:
    def __init__(self):
        print("i am in init")
        self.x = 'python' #实例具有了x属性,x属性的值是'python'
        
f = Foo()
i am in init

dir(f) #
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'x'] #最尾端有x的这个方法
f.x #可以直接调用
'python'

对象和面向对象
对象:表示客观世界问题空间中的某个具体事物,又表示软件系统解空间中的基本元素。
面向对象程序设计:(object- oriented programming,oop):一种程序设计范型,也是一种程序开发的方法。

2 属性

2.1 理解类属性和实例属性

特点:1、类属性,又称为静态属性;2、只有通过类才能修改;3、实例也拥有类属性,但不能修改类属性。

class Foo:
    lang = 'python'
    
lang #lang的作用域只在类里面
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'lang' is not defined
dir(Foo)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'lang'] #对象都可以用dir
Foo.lang #引用Foo类的lang属性 

f = Foo()
type(f)
<class '__main__.Foo'>
'python'

Foo.group = 'laoqi classroom' #给类增加属性,对象可以任意增加属性
dir(Foo)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'group', 'lang']

给实例增加属性,类不会增加属性。但给类增加属性,实例也会增加属性。
例:类是工厂,生产的汽车是实例,你买了的车增加装饰物,生产线并不会增加装饰物。

类是静态属性:不因为实例的值的修改而改变自身属性,因此是静态属性
类属性只能通过类修改,不能通过实例修改

2.2 理解self的作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值