Python 类和对象-上

#类和对象 class Human:
    #属性 -> 成员属性(变量)
    ear = 2
    mouth = 1
    sex = ‘man‘
    age = 28
    name = ‘zhangwang‘
    married = False
    color = ‘yellow‘
    #特征 -> 成员方法(函数)
    def walk(self):
        print(‘直立行走‘)

    def eat(self):
        print(‘吃饭‘)

    def sleep(self):
        print(‘睡觉‘)

    def playgame(self):
        print(‘打游戏‘)

#查看类的值
print(Human)

#类的类型
print(type(Human))

#实例化对象操作
wangwang = Human()

#打印对象的值
print(wangwang)

#打印对象的类型
print(type(wangwang))

#检测类的成员(在类中声明的成员都可以看到)
print(Human.__dict__)

#检测对象中的成员
print(wangwang.__dict__)
print(wangwang.sex)

class GF:
    #属性
    sex = ‘女‘
    age = 18
    height = ‘170‘
    weight = ‘50kg‘
    threeWei = (‘36E‘,‘2.1‘,‘108CM‘)
    #方法
    def guang(self):
        print(‘guang‘)
    def eat(self):
        print(‘chi‘)
    def cry(self):
        print(‘wu‘)
#类的基本操作
#访问
print(GF.sex)#属性
GF.eat(1)#方法
#修改
print(GF.age)
GF.age = 22#属性
print(GF.__dict__)
#定义一个函数
‘‘‘
def mycry():
    print(‘Do not cry‘)
GF.cry = lambda :print(‘啊呜‘)#方法
GF.cry = mycry#方法
GF.cry()
‘‘‘
#添加
GF.hobby = ‘act‘#属性
print(GF.__dict__)
GF.upsky = lambda : print(‘upsky‘)#方法
GF.upsky()
#删除
del GF.threeWei
print(GF.__dict__)
del GF.cry
print(GF.__dict__)
#对象的基本操作
bingbing = GF()
print(bingbing.__dict__)
#访问
print(bingbing.sex)#属性
bingbing.eat()#方法
#修改
bingbing.age = 28 #属性  修改属性只会影响当前对象本身
print(bingbing.__dict__)
bingbing.cry = lambda : print(‘bigcry‘)
print(bingbing.__dict__)
bingbing.cry()
#添加操作
bingbing.cloth = ‘一袭长裙‘#属性
print(bingbing.__dict__)
bingbing.walk = lambda : print(‘走红毯‘)#方法
print(bingbing.__dict__)
bingbing.walk()
#删除
bingbing.water = ‘more‘
bingbing.action = lambda : print(‘专业演员‘)
print(bingbing.__dict__)
del bingbing.water#属性
del bingbing.action#方法
print(bingbing.__dict__)


#关于self
‘‘‘
通过类调用的函数: 绑定类的方法
通过对象调用的函数: 非绑定类的方法
‘‘‘
class Human:
    #属性
    age = 18
    sex = ‘female‘
    name = ‘sanpao‘

    #方法
    def eat(self):
        print(self)#通过类来调用的时候self只是函数的一个普通形参,必须给实参!
        print(‘吃西瓜‘)

    def drink(self):
        print(self)#通过对象调用的时候self接受的肯定是当前的对象!此处的self不是关键字 只是一个形参,名字可以修改,但是推荐用self
        print(‘喝西瓜汁‘)

    #绑定类的方法(肯定)
    def la():
        print(‘puchi‘)

    #绑定类的方法/非绑定类的方法(取决于怎么使用)
    def sa(arg):
        print(‘hualala‘)

#通过类调用
Human.eat(‘nidaye‘)

#通过对象调用
zw = Human
zw.drink(1)

#类来访问sa方法(绑定类的方法)
Human.sa(1)

#通过对象方法sa方法(非绑定类的方法)
zw.sa(1)


#人类
class Human:
    #属性
    age = 18
    #私有化封装成员属性[只能在当前结构中使用]
    __sex = ‘male‘
    color = ‘yellow‘
    hair = ‘black‘

    #方法
    def say(self):
        print(‘ayi‘)

    def walk(self):
        print(‘sousou‘)

    #私有化成员方法(只能在当前类或者对象的结构中访问)
    def __niao(self):
        print(‘xuxu‘)

    #测试:自己访问自己的私有成员
    def demo(self):
        #访问私有方法niao
        self.__niao()
        print(‘测试私有成员的访问‘)

#实例化对象
tbw = Human()

#调用tbw的成员
‘‘‘
print(tbw.age)
print(tbw.hair)
print(tbw.color)

tbw.say()
tbw.walk()
‘‘‘
#相当于别人叫你的名字 想查看你的性别[私有化成员不可以在类/对象的当前结构外访问]
#print(tbw.sex)

#tbw.niao()

#访问测试方法demo[私有化成员可以在类/对象的当前结构中访问]
#tbw.demo()

#Python对私有成员的封装实际上使用了改名策略(name  mangling)
print(Human.__dict__)
print(tbw._Human__sex)
tbw._Human__niao()

print(Human._Human__sex)
Human._Human__niao(1)
#继承
#刘备类:父类 -> 被其他类继承的类称之为父类(超类,基类)
class LiuBei:
    #属性
    familyname = ‘刘‘
    firsttime = ‘备‘
    sex = ‘man‘
    money = ‘100‘
    country = ‘蜀国‘
    wife = (‘甘夫人‘,‘糜夫人‘,‘孙尚香‘)
    #方法
    def say(self):
        print(‘险损我一员大将‘)

    #非绑定类的方法[对象访问]
    def drink(self):
        print(self)
        print(‘来干了这杯‘)

    def walk(self):
        print(‘gogo‘)

    #绑定类的方法
    def la():
        print(‘hualala‘)

#刘禅类:子类 -> 继承其他类的类称之为子类(派生类)
class LiuShan(LiuBei):
    #子类独有的成员
    #属性
    weight = ‘180斤‘

    #方法
    def douququ(self):
        print(‘此间乐,不思蜀‘)

    #重载父类方法
    def say(self):
        print(‘刘备baba‘)

    #重载父类的drink方法,但是还要将父类中操作拿过来使用
    def drink(self):
        print(‘举起筷子,夹一口菜‘)
        #喝酒 通过对象调用的方法的重载(推荐使用super().方法名())
        super().drink() #LiuBei.drink(self)

    #重载父类的la方法,但是还要将父类中操作拿过来使用
    def la():
        print(‘准备好纸‘)
        #调用父类的la方法(推荐使用类名.方法名)
        LiuBei.la()

#查看刘禅类
print(LiuShan.__dict__)#继承操作不会将成员直接复制到子类中
print(LiuShan.sex)
LiuShan.walk(1)
#print(LiuShan.wife)
‘‘‘
1.所有的类的父类都是object子类
2.子类继承父类则可以访问父类的所有成员.(私有成员除外)
3.子类继承父类并不会将父类的所有成员复制到子类当中去,访问父类成员是间接通过父类来访问的(目的:节省资源)
4.子类可以具有自己独有的属性和方法
5.子类可以重载父类中的方法,只需要设置和父类指定成员相同的名称即可实现重载,重载之后的成员,子类只会访问当前类中的成员,而不会调用父类中同名的成员
6.子类中如果重载父类的方法,并且还想将重载的父类方法借调过来使用,可以在重载的方法中使用如下方法
[父类名.方法()](适合类)  或者  [super().方法()](适合对象)
‘‘‘
result = issubclass(type,object)
print(result)

#访问子类独有的成员
LiuShan.douququ(1)
print(LiuShan.weight)

#访问继承来的方法
LiuShan.say(1)

#访问重载并且调用了父类的方法的方法
LiuShan.la()

ls = LiuShan()
ls.drink()


#Python语法中没有受保护的语法,程序员约定一种操作来实现受保护
class Father:
    #属性
    sex = ‘man‘
    #受保护的
    _money = 1000
    color = ‘yellow‘
    #私有化
    __wife = ‘bingbing‘

    #方法
    def eat(self):
        print(Father._money)
        print(‘吃吃吃‘)

    def niao(self):
        print(‘哗哗哗‘)

class Son(Father):
    #添加一个子类的方法用于测试子类中的访问
    def test():
        #方式访问父类中私有成员
        #print(Father.wife)
        #print(Son.wife)
        #访问父类中公共的成员
        print(Son.color)
        #访问受保护的成员
        print(Son._money)

Son.test()
Father.eat(1)
print(Father._money)
#受保护的定义
‘‘‘
私有化:只能在类或者对象的结构中访问
公共的:可以在任何位置访问
受保护:可以在当前类或者对象 和子类或者子类对象中访问

        类内    子类中    类外部
私有化:   √        ×        ×
受保护:   √        √        √(×类外部应该不能访问)
公共的:   √        √        √
‘‘‘

#单继承

class Biology:
    #属性
    life = ‘活的‘
    #方法
    def shengzhi(self):
        print(‘生育后代‘)

class animal(Biology):
    #属性
    age = 18
    #方法
    def jiao(self):
        print(‘叫两声听听‘)

class mammal(animal):
    #属性
    gen = ‘胎生‘
    #方法
    def weinai(self):
        print(‘干了这杯奶‘)

class Human(mammal):
    #属性
    name = ‘囡囡‘

    def dapai(self):
        print(‘王炸‘)

#实例化对象操作
zb = Human()
zb.dapai()
zb.weinai()
zb.jiao()
zb.shengzhi()


#多继承

class GrandPa:
    def damajiang(self):
        print(‘大三元‘)

class GrandMa:
    def doudizhu(self):
        print(‘飞机‘)

class LaoLao:
    def dance(self):
        print(‘弯弯的河水天上来‘)

class LaoYe:
    def zhajinhua(self):
        print(‘哗哗哗‘)

class PaPa:
    def zhuanqian(self):
        print(‘赚钱‘)

class MaMa:
    def huaqian(self):
        print(‘花钱‘)

class LaoWang:
    def fanqiang(self):
        print(‘FQ‘)

class Son(LaoWang,MaMa,PaPa,LaoYe,LaoLao,GrandMa,GrandPa):
    def kengdie(self):
        print(‘我老子是刘备‘)

#实例化对象
ls = Son()
ls.kengdie()
ls.fanqiang()
ls.huaqian()
ls.doudizhu()
ls.dance()
ls.damajiang()
ls.zhajinhua()
ls.zhuanqian()


#菱形继承
‘‘‘
        动物类

人类              鸟类

        鸟人类
‘‘‘

#动物类
class Animal:

    #属性
    pass

    #方法
    def say(self):
        print(‘Animal张开嘴‘)
        print(‘Animal合上嘴‘)

#人类
class Human(Animal):
    #属性
    pass

    #方法
    def say(self):
        print(‘人类张开嘴‘)
        #调用动物类的say方法
        super().say()
        print(‘人类合上嘴‘)

#鸟类
class Bird(Animal):
    #属性
    pass

    #方法
    def say(self):
        print(‘鸟类张开嘴‘)
        #调用动物类的say方法
        super().say()
        print(‘鸟类合上嘴‘)

#鸟人类
class Birdy(Human,Bird):
    #属性
    pass

    #方法
    def say(self):
        print(‘鸟人类张开嘴‘)
        #鸟类的say
        Bird.say(self)
        #人类say
        Human.say(self)
        print(‘鸟人类合上嘴‘)

#实例化鸟人对象
by = Birdy()
by.say()

#查看继承关系的mro列表
result = Birdy.mro()
print(result)


#mixin设计模式

#水果类
class Fruit:
    pass

#南方水果类
class SouthFruit(Fruit):
    pass

#北方水果类
class NorthFruit(Fruit):
    pass

#北方礼物水果
class NorthGiftFruit(NorthFruit):
    pass
#北方非礼物水果
class NorthNotGiftFruit(NorthFruit):
    pass

#南方礼物水果
class SouthGiftFruit(SouthFruit):
    pass
#南方非礼物水果
class SouthNotGiftFruit(SouthFruit):
    pass

#苹果
class Apple(NorthGiftFruit):
    pass

#梨
class Pear(NorthNotGiftFruit):
    pass

#桔子
class Orange(SouthGiftFruit):
    pass

#香蕉
class Banana(SouthNotGiftFruit):
    pass

#多继承
#mixin设计模式

#水果类
class Fruit:
    pass

#南方类
class South:
    pass

#北方类
class North:
    pass

#礼物类
class Gift:
    pass

#非礼物类
class NotGift:
    pass

#苹果类
class Apple(Fruit,North,Gift):
    pass

#梨
class Pear(Fruit,North,NotGift):
    pass

#桔子
class Orange(Fruit,South,Gift):
    pass

#香蕉
class Banana(Fruit,South,NotGift):
    pass
时间: 2024-10-21 14:34:20

Python 类和对象-上的相关文章

python 类和对象的属性

python类和对象的属性分为类属性和对象属性两大类,类属性属于类,而对象属性属于对象. 1. 父类的对象属性会被子类的对象继承. 2. 父类的类属性会被子类继承,还是作为类属性,如果父类改变了类属性,父类和子类的类属性都会被改变. 3. 子类继承父类的类属性可以通过类名+属性名使用,但是一旦发生赋值,就会新定义一个相同名字的子类自己的类属性. 4. 类的对象可以通过对象名+属性名使用类属性,但是一旦发生赋值,就会新定义一个相同名字的对象属性,而且不会被继承. eg: >>> class

Effective JavaScript Item 51 在类数组对象上重用数组方法

Array.prototype对象上的标准方法被设计为也可以在其它对象上重用 - 即使不是继承自Array的对象.因此,在JavaScript中存折一些类数组对象(Array-like Objects). 一个典型的例子是函数的arguments对象,在Item 22中对它进行过介绍.该对象并不继承自Array.prototype,所以我们不能直接调用arguments.forEach来对其中的元素进行遍历.但是,我们可以通过首先得到forEach方法的对象,然后调用call方法(可以参考Ite

python类与对象各个魔法方法总结

1.python类与对象各个魔法方法总结: 2.各个魔法方法应用举例: 3.实例训练: (1)我们都知道在 Python 中,两个字符串相加会自动拼接字符串,但遗憾的是两个字符串相减却抛出异常.因此,现在我们要求定义一个 Nstr 类,支持字符串的相减操作:A – B,从 A 中去除所有 B 的子字符串. class Nstr(str): def __sub__(self,other):  self=list(self)         other=list(other) for i in ot

python类与对象基本语法

本文和大家分享的主要是python中类与对象相关内容,一起来看看吧,希望对大家学习python有所帮助. 面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它来进行创建的飞机就相当于对象. 定义一个类 class person: age=10 #下面sex没有进行初始化是会报错的 #sex name="intsmaze" def getPe

python类和对象理解

类的概念 类(class)抽象的概念,比如说人类.鸟类.水果.是一个总的称呼,没有具体到某个物体: 对象(object,指具体实例,instance): 类定义的语法: class 类名: 执行语句 类变量 类方法 类最重要的两部分就是类变量和类方法,类成员之间的可以相互调用. 程序可以在类中给新变量赋值就是增加类变量,可以通过del语句删除已有类的变量. 在__init__构造函数(构造函数后面会说到)里面的是实例变量,程序可以任何位置(类里面或者类外面)增加实例变量,删除则用del语句. 在

第13课 python 类与对象1

今日我们开始 学习类 & 对象.....(上个课时,我们只是说了debug,这种技能,只能说概念,真正debug,还是要自己动手) 学习很多对象语言,我自己都很模糊,什么事对象编程语言.....但是学python后,就清晰了... 类 对象 类:我们从人类,男 女 去区分. ####说明类 是一个 分类,有男人,女人相同的特征,共同的属性..所以 我们叫做类: ####在python 中 分 字符,整数,浮点类,这些类,其实说白了是一种概念化的内容.类下面是对象(具体的每个) ####还是不可以

Python 类与对象简单理解及总结

类: 类,指一群具有相同属性和方法的对象的抽象. 类的更严格的定义是由某种特定的元数据所组成的内聚的包.它描述了一些对象的行为规则,而这些对象就被称为该类的实例.类有接口和结构.接口描述了如何通过方法与类及其实例互操作,而结构描述了一个实例中数据如何划分为多个属性. 对象: 对象是类的实例化,指某个具体的东西. 对象:一个对象有自己的状态.行为和唯一的标识:所有相同类型的对象所具有的结构和行为在他们共同的类中被定义. 状态(state):包括这个对象已有的属性(通常是类里面已经定义好的)在加上对

Python 类与其对象的创建和应用

1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self,a_name,a_dob=None,a_times=[]): self.name=a_name self.dob=a_dob self.times=a_times >>> sarah=Athlete('Sarah Sweeney','2002-07-02',['2:58','2.34','1

python类和对象-扩展

1.为类或对象动态创建属性或方法 2.__slots__ = ('name','age'),[实例]只能创建指定的属性属性或方法 ---新式类 3.执行父类的构造函数的不同Father.__init__(self) --经典类super(Son,self).__init__() --新式类 4.Person.__bases__ 只会显示一层继承的所有父类5.__call__ __call__ 一个已经实例化的对象p,在调用p()6.python中一切都是对象,类本身也是对象,类是由type产生的