Python面向对象


Class Cat:
    #初始化方法,创建对象时会自动调用    
    def __init__(self, color, weight, weiba):
        self.color = color
        self.weight = weight
        self.weiba = weiba
        
    #类中的方法,都需要加self参数
    def eat(self):
        print("吃鱼")
        
xiaohuamao = Cat("white", 5, "有尾巴")
xiaohuamao.eat()

  1. Demo1
#conding=utf-8 

class SweetPotato:

    def __init__(self):
        self.cookLevel = 0
        self.cookString = "生的"
        self.condiments  = []
    
    def cook(self,times):
        self.cookLevel += times
        if self.cookLevel > 0 and self.cookLevel <= 3:
            self.cookString = "生的"
        elif self.cookLevel > 3 and self.cookLevel <= 5:
            self.cookString = "半生不熟"
        elif self.cookLevel > 5 and self.cookLevel <= 8:
            self.cookString = "熟了"
        elif self.cookLevel > 8:
            self.cookString = "烤焦了"

    def addCondiments(self,temp):
        self.condiments.append(temp)
        
    def __str__(self):
        if len(self.condiments) == 0:
            s = "地瓜的cookLever为:%s,地瓜的生熟程度为:%s"%(str(self.cookLevel),self.cookString)
        else:
            zuoliao = ""
            for i,condiment in enumerate(self.condiments):
                if i == len(self.condiments) - 1:
                    zuoliao = zuoliao + condiment
                else:
                    zuoliao = zuoliao + condiment + ","
            s = "地瓜的cookLever为:%s,地瓜的生熟程度为:%s,添加的佐料为:%s"%(str(self.cookLevel),self.cookString,zuoliao)

        return s

potato = SweetPotato()
print(potato) 
potato.cook(1)
potato.addCondiments("胡椒")
print(potato)
potato.cook(3)
potato.addCondiments("辣椒")
print(potato)
potato.cook(2)
potato.addCondiments("酱油")
print(potato)
potato.cook(4)
potato.addCondiments("醋")
print(potato)

  1. Demo2

#coding=utf-8

class Home:
    
    def __init__(self,area):
        self.area = area
        self.items = []

    def addItems(self,item):
        itemArea = item.getArea();
        self.area -= itemArea
        if self.area >= 0:
            print("添加家具成功")
            self.items.append(item)
        else:
            print("添加家具失败,空间不够了")
            self.area += itemArea

    def __str__(self):
        
        if len(self.items) > 0:
            s = "当前家里剩余的面积为:" + str(self.area) + "......家里的家具为:"
            for temp in self.items:
                s += temp.getName() + ","
            return s.strip(",")
        else:
            s = "当前家里剩余的面积为:" + str(self.area) + "......家里没有家具"
            return s
        
    
class Bed:
                         
    def __init__(self,name,area):
        self.name = name 
        self.area = area

    def getName(self):
        return self.name

    def getArea(self):
        return self.area
    
    def __str__(self):
        s = "床的名字为:%s,床的面积为:%s"%(self.name,str(self.area))
        return s
    

home = Home(100)
print(home)

bed = Bed("大床",15)
print(bed)
home.addItems(bed)
print(home)

bed2 = Bed("婴儿床",150)
print(bed2)
home.addItems(bed2)
print(home)

  1. 私有属性和私有方法

在属性和方法前面加两个下划线,代表私有属性和私有方法。私有属性和私有方法只能在类内部使用,在类外部不能使用。在类外部通过本类对象来调用私有属性和私有方法也是不行的(和java的区别)。


#coding=utf-8  

class Person:

    def __init__(self):
        #这表示私有属性,外部不能直接访问
        self.__name = None
        self.__age = None

    def setName(self,name):
        self.__name = name

    def getName(self):
        return self.__name

    def setAge(self,age):
        self.__age = age

    def getAge(self):
        return self.__age

    #这是私有方法,外部不能直接调用
    #Python把私有方法的名字改了,改成_Person__test1()
    def __test1(self):
        print("test1======")
    
    #这个方法暴露给外部,来调用私有方法
    def test2(self):
        self.__test1()
        print("test2======")


person = Person()
person.setName("Tom")
person.setAge(18)

print(person.getName() + "......" + str(person.getAge()))

person.test2()

#这样可以调用私有方法 
person._Person__test1()

  1. 多继承

多继承中,两个父类有同名方法,子类调用该方法,则执行第一个父类里面的方法。(由mro算法决定)

  1. 多态

Python是弱类型语言,多态表现并不明显

  1. 类属性、类方法和静态方法

#coding=utf-8

class Test(object):

    #类属性
    num = 0
    
    #实例方法
    def __init__(self):
        #实例属性
        self.age = 10

    #实例方法
    def abc(self):
        print("实例方法")

    #类方法(主要作用是用来操作类属性的,比较安全,和静态方法区别开来)
    @classmethod
    def setNum(cls,num):
        cls.num = num 

    #静态方法(完成一个相对独立的功能)
    @staticmethod
    def testStatic():
        print("test static method")
    

t = Test()
t.abc()

print(Test.num)
#通过类方法来操作类属性,这样比较安全
Test.setNum(20)
print(Test.num)

t.testStatic()
Test.testStatic()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 一、面向对象,这个对象到底是什么? 这个对象不是python中的实例,python中我们把一个类的实例也叫做对象,...
    youngkun阅读 910评论 0 2
  • Python面向对象编程 面向对象的编程产生的历史原因:由于面向过程编程在构造系统时,无法解决重用,维护,扩展的问...
    学成秃子我不怕阅读 551评论 1 2
  • 小区的一位热心妈妈组织的公益读经活动,十几位小朋友,朗朗的读书声中感受传统文化的魅力,非常赞。 “弟子规,圣人训;...
    故园心阅读 1,772评论 0 49
  • 疲惫时只想舒心地躺下来,最好是躺倒在一块柔软的岛屿上。那里有风吹过的声音,有鸟飞过的影子,有大海一般的抚摸...
    冰夫阅读 164评论 0 0
  • 将第三方头文件导入
    我想走走阅读 122评论 0 0