classmethod 继承_类中的装饰器(property classmethod staticmethod)与继承

第一部分:上节课复习

1.类与对象

对象是盛放数据和功能的容器

类存放的对象相似的数据与功能的容器

2.类和对象的使用

class student:

n=0

def __init__(self,name,age,gender):

student.n+=1

self.name=name

self.age=age

self.gender=gender

def choose(self):

pass

obj1=student('egon',18,'male')

obj2=student('tom',19,'male')

print(obj1.n)或者student.n

结果为:2,每调用一次类n的值就加1,总共调用了两次的类

二:今日内容

1.一切皆对象

一般的数据类型(int,str)都是内置的类

l1=list([1,2,3])

list.append(l1,4)

print(l1)

结果是:[1,2,3,4]

2.类内的装饰器

(1) property

例子1class people:

def __init__(self,name,weight,height):

self.name=name

self.weight=weight

self.height=height

@property                                                            #作用在于p1.bmi()在调用时候可以不用括号

def bmi(self):

return self.weight/(self.height**2)

p1=people('ehon',65,1.73)

print(p1.bmi)

例子2~实现访问,修改,删除

property

class People:

def __init__(self,name):

self.__name=name

@property

def name(self):

return self.__name

@name.setter

def name(self,x):

if type(x) is not str:

raise Exception('名字必须是字符串类型')

self.__name=x

@name.deleter

def name(self):

print('不允许删除')

p1=People('egon')

print(p1.name)

p1.name='EGON'

del p1.name

print(p1.name)

结果是:

egon

不允许删除

EGON

3.绑定方法与非绑定方法

3.1绑定方法和非绑定方法

绑定方法:绑定给谁就有谁来调用,谁来调用就会将自己当做第一个参数传入

非绑定方法:不与类和对象绑定,意味着谁来调都可以,但无论谁来调都是一个普通的函数,没有自动传参的效果

3.2

class people:

def __init__(self,name):

self.name=name

#但凡在类中定义一个函数,默认就是绑定给对象的,应该由对象进行调用会将对象当做第一个参数自动传入

def tell(self):

print(self.name)

#类中定义的函数被classmethod装饰过,就绑定给类,应该由类进行调用类来调用会把类半身当做第一个参数自动传入

@classmethod

def f1(cls):  #cls=people

print(cls)

#类中定义的函数被staticmethod装饰过,就成了一个非绑定的方法,既是一个普通的函数,都可以调用,但无论谁来调用都是一个普通的函数,没有自动传参的效果

@staticmethod

def f2(x,y):

print(x,y)

p1=people('egon')

例子2:

import  setting

class people:

def __init__(self,name,age,gender):

self.name=name

self.age=age

self.gender=gender

def tell_info(self):

print('

@classmethod

def from_conf(cls):

print(cls)

return cls(setting.NAME,setting.AGE,setting.GENDER)

@staticmethod

def create_id():

import uuid

return uuid.uuid1()

4.面向对象---继承

4.1 继承四创建新类的一种方式,新建的类称之为子类,被继承的类称之为父类,基类,超类;类是用来解决对象之间的冗余问题的,而继承则是解决类与类之间的冗余问题的

4.2 继承的特点:子类可以遗传父类的属性

单继承与多继承  经典式与新式  强耦合型与扩展性相悖

5.先抽象再继承

用来查找类与类之间的关系,先找对象总结出一个类,如果有必要再总结出父类

2e8205968ef0940c2db84b3b735c6db6.png

5.单继承背景下的属性查找

查找顺序或者原则:先从对象里找,再从类中中,再从父类找

例子1:

class Bar:

def f1(self):

print('Bar.f1')

def f2(self):

print('Bar.f2')

self.f1()

class Foo(Bar):

def f1(self):

print('Foo.f1')

obj=Foo()

obj.f2()

#obj对象本身没有f2,故向Foo()找,但是Foo()中也没有向Foo()的父类Bar找,所以执行了print('Bar.f2')。到达self.f1()时,self.f1()=obj.f1(),也是先找obj,再找Foo

结果是:

Bar.f2

Foo.f1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值