Python 类和对象-上

Posted Sun阳

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 











以上是关于Python 类和对象-上的主要内容,如果未能解决你的问题,请参考以下文章

python网络爬虫

python之type

java中的object类和泛型

2 Class类和Class实例

Java面向对象 类和对象

Python的类和对象入门