面向对象

Posted 皖心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对 象是类的实例。
对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。 实例化:创建一个类的实例,类的具体对象。 
2 class 类名:
3     类的文档字符串
4     类体
5 ‘‘‘
类的用法:
  • 实例化产生对象
  • 属性引用:数据属性;函数属性
class Chinese:

    country = ‘china’.    #数据属性

    def __init__(self,name,color,age):
        #初始化,但是一定不能有返回值
        if not isinstance(name,str):
            raise TypeError #挑起异常
        
        self.name = name
        self.color = color
        self.age = age
   def talk(self):        #函数属性
        print(talk)

    def eat(self):
        print(eat)

    def sleep(self):
        print(sleep)

p1 = Chinese(mona,pink,18) ===》 p1-对象

类的数据属性可以增删查改

对象的数据属性可以增删查改

对象本身并没有函数属性,但是可以访问类的--对象的绑定方法。对象里通用的数据和函数是引用类的名称空间

对象的属性,优先从自己的__dict__字典里找,如果自己的字典里没有,访问类里的,如果类里也没有,报错,自己定义的属性对其他引用了类的相同属性没有影响

个完整的类--对象的应用案例:

classtools.py文件内容如下:---让每个对象都能输出自己的相应的信息

Assorted class utilities and tools

class AttrDispaly:
    ‘‘‘Provides an inheritable print overload method that displays instances with their class nams
    and name = value pair for each attribute stored on the instances itself
     (but not attrs inherit from its class).
     Can be mixed into any class,and work on any instance.‘‘‘
    def gatherAttrs(self):
        attrs = []
        for key in sorted(self.__dict__):
            attrs.append(%s=%s % (key,getattr(self,key)))
        return ,.join(attrs)


    def __str__(self):
        return [%s:%s] % (self.__class__.__name__,self.gatherAttrs())

if __name__ == __main__:
    class Toptest(AttrDispaly):
        count = 0
        def __init__(self):
            self.attr1 = Toptest.count
            self.attr2 = Toptest.count+1
            Toptest.count += 2

    class Subtest(Toptest):
        pass

    x,y = Toptest(),Subtest()
    print(x)
    print(y)

person.py的文件内容如下:

from classtools import AttrDispaly

class Person(AttrDispaly):
    def __init__(self,name,job = None,pay = 0):
        self.name = name
        self.job = job
        self.pay = pay

    def lastname(self):
        return self.name.split()[-1]

    def giveRaise(self,percent):
         self.pay = int(self.pay) * (1 + percent)

    # def __str__(self):
    #     return ‘[person:%s,%s]‘ % (self.name,self.pay)


class Manager(Person):
    def __init__(self,name,pay):
        # self.person = Person(name,‘mgr‘,pay)
        Person.__init__(self,name,mgr,pay)

    def giveRaise(self,percent,bonus=.1):
        Person.giveRaise(self, percent + bonus)

file文件:---将得到的数据储存到文件

from person import Person,Manager
bob = Person(bob smith)
sue = Person(sue jones,job = dev,pay = 200)
tom = Manager(tom jones,5000)


import shelve
db = shelve.open(persondb,)
for object in (bob,sue,tom):
    db[object.name] = object
db.close()

db = shelve.open(persondb)
# print(len(db))
#
# print(list(db.keys()))
# bob = db[‘bob smith‘]
# print(bob)

for key in db:
    print(key,===>,db[key])

 

 

 

 

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

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器