python基础-面向对像、类名\实例调用、__init__函数、类名\实例增删改查属性

来源:互联网 发布:怎样下载办公室软件 编辑:程序博客网 时间:2024/06/16 15:38

        • 利用函数来引入面向对象
        • 面向对象类名调用
        • 类调用的一些迷惑用法
        • 面向对象实例调用
        • 面向对象_init_
        • 对象属性的增删改查2种方式
        • 练习demo

利用函数来引入面向对象

在了解python面向对象概念,我们先用函数来实现

# #方法方式定义类def Dog():    def bite(person):        person["total"]-=5    dog = {        "name":"alpha",        "total":100,        "bite":bite    }    return dogdef Person():    def stack(dog):        dog["total"]-=5    person = {        "name":"safly",        "total":100,        "stack":stack    }    return persondog = Dog()person = Person()person["stack"](dog)print(dog)print(person)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py{'name': 'alpha', 'total': 95, 'bite': <function Dog.<locals>.bite at 0x007F1810>}{'name': 'safly', 'total': 100, 'stack': <function Person.<locals>.stack at 0x007F17C8>}Process finished with exit code 0

面向对象(类名调用)

#类定义class Person:    def walk(self):        print("self",self)        print("walk")    country = "中国"    mWalk = walk#获取属性2种方法print(Person.country)print(Person.__dict__["country"])#调用方法print(Person.walk)#如下错误missing 1 required positional argument: 'self'# print(Person.walk())Person.walk(1)Person.mWalk("mmmmm")#通过如下的方式修改Person.country = "美国"print(Person.country)#不能修改__dict__# Person.__dict__["country"] = "美国"# print(Person.__dict__["country"])#直接添加属性Person.role = "人"print(Person.role)# 删除属性del Person.role# print(Person.role)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py中国中国<function Person.walk at 0x036817C8>self 1walkself mmmmmwalk美国人Process finished with exit code 0

1、类名.静态属性
2、类名.方法(self) 必须传参数!!!
否则TypeError: walk() missing 1 required positional argument: ‘self’

类调用的一些迷惑用法

def method():    print("out method")class Animal():    name = "animal"    method = method    def method1(self, a):        print("method1",a)    def method2(a):        print("method2", a)a = Animal()print(a.method1(1))print("--------")#如下方式不行# a.method()#如下方式也不行# a.method2(2)#如下可以调用类外函数Animal.method()print("--------")Animal.method2(111)print("--------")Animal.method1(Animal,333)print("--------")Animal.method1(a,333)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/python.pymethod1 1None--------out method--------method2 111--------method1 333--------method1 333Process finished with exit code 0

面向对象(实例调用)

# #类定义class Person:    #动态属性、函数属性、方法    def walk(self):        print(self)        print("walk")    # 静态属性(数据属性)    country = "中国"    mWalk = walkp = Person()print(p.country)p.walk()p.mWalk()p.role = "driver"print(p.role)# 如下2种报错!!!!!!!!!!# p.mWalk(33)# p.walk("呵呵")

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py中国<__main__.Person object at 0x00B32270>walk<__main__.Person object at 0x00B32270>walkdriverProcess finished with exit code 0

实例.方法(self) 不需要传递参数

面向对象(_init_

class Person:    #动态属性、函数属性、方法    def walk(self):        print(self)        print("walk")    # 静态属性(数据属性)    country = "中国"    mWalk = walk    #添加属性返回初始化对象    def __init__(self):        #内存地址        print(id(self))        print("init")    #把上面的无参__init__覆盖了,使用如下的初始函数    def __init__(self,name):        #内存地址        self.name = name        print(id(self))        print("self",self)        print("init",name)#init会被覆盖,看执行顺序!!!!!p = Person("saly")# 以下报错# p = Person()# 内存地址print(id(p))print(p.__dict__)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py11740496self <__main__.Person object at 0x00B32550>init saly11740496{'name': 'saly'}Process finished with exit code 0

再来看_init_的代码

class Person:    def __init__(self,name):       self.name = name       print(id(self),self)    def walk(self):        print(id(self), self)        print("walk",self.name)p = Person("safly")Person.__init__(p,"rrr")print(p.__dict__)print("------------")#走__init__函数p = Person("safly")p.walk()print("------------")p = Person("safly")Person.walk(p)#报错么有该属性# Person.walk(11)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py46015088 <__main__.Person object at 0x02BE2270>46015088 <__main__.Person object at 0x02BE2270>{'name': 'rrr'}------------46015856 <__main__.Person object at 0x02BE2570>46015856 <__main__.Person object at 0x02BE2570>walk safly------------46015952 <__main__.Person object at 0x02BE25D0>46015952 <__main__.Person object at 0x02BE25D0>walk saflyProcess finished with exit code 0

如下也是构造对象的另外方式

#构造对象class Person:    def __init__(self, name):        print(self,name)        self.name = name        return selfp = Person.__init__(Person,"ddd")print(p.name)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.py<class '__main__.Person'> ddddddProcess finished with exit code 0

对象属性的增删改查2种方式

通过实例.dict进行增删改查
或者实例.属性方法实现

class Person:    #动态属性、函数属性、方法    def walk(self):        print("walk")    # 静态属性(数据属性)    country = "中国"    def __init__(self,name):        #内存地址        self.name = namep = Person("saly")#修改print(p.__dict__["name"])p.__dict__["name"] = "aaa"print(p.__dict__)#添加p.__dict__["sex"] = "nv"print(p.__dict__)#删除p.__dict__.pop("sex")print(p.__dict__)#添加新方式p.sex = "nv"print(p.sex)print(p.__dict__)p.sex = "nan"print(p.sex)print(p.__dict__)#删除del p.sexprint(p.__dict__)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/safly.pysaly{'name': 'aaa'}{'name': 'aaa', 'sex': 'nv'}{'name': 'aaa'}nv{'name': 'aaa', 'sex': 'nv'}nan{'name': 'aaa', 'sex': 'nan'}{'name': 'aaa'}Process finished with exit code 0

练习demo

#人类 :# 属性 :life_value,aggr,name,job# 方法: attackclass Person:    def __init__(self,life_value,aggr,name,job):        self.life = life_value        self.aggressive = aggr        self.name = name        self.job = job    def attack(self,dog_obj):   #boss_gold,tiedan        print('%s 攻击了 %s'%(self.name,dog_obj.name))        dog_obj.life = dog_obj.life - self.aggressive#狗类:# 属性:life_value,aggr,name,kind# 方法:biteclass Dog:    def __init__(self,life_value,aggr,name,kind):        self.life = life_value        self.aggressive = aggr        self.name = name        self.kind = kind    def bite(self,person_obj):        print('%s 咬了 %s' % (self.name, person_obj.name))        person_obj.life -= self.aggressivetiedan = Dog(1000,100,'铁蛋','土狗')boss_gold = Person(100,2.5,'太黑','old_driver')boss_gold.attack(tiedan)  #Person.attack(boss_gold,tiedan)print(tiedan.life)

输出如下:

E:\python\python_sdk\python.exe "E:/python/py_pro/5. 面向对象交互.py"太黑 攻击了 铁蛋997.5Process finished with exit code 0
阅读全文
0 0
原创粉丝点击