python基础-面向对像、类名\实例调用、__init__函数、类名\实例增删改查属性
2017-11-17 16:08
741 查看
利用函数来引入面向对象
面向对象类名调用
类调用的一些迷惑用法
面向对象实例调用
面向对象_init_
对象属性的增删改查2种方式
练习demo
输出如下:
输出如下:
1、类名.静态属性
2、类名.方法(self) 必须传参数!!!
否则TypeError: walk() missing 1 required positional argument: ‘self’
输出如下:
输出如下:
实例.方法(self) 不需要传递参数
输出如下:
再来看_init_的代码
输出如下:
如下也是构造对象的另外方式
输出如下:
或者实例.属性方法实现
输出如下:
输出如下:
面向对象类名调用
类调用的一些迷惑用法
面向对象实例调用
面向对象_init_
对象属性的增删改查2种方式
练习demo
利用函数来引入面向对象
在了解python面向对象概念,我们先用函数来实现# #方法方式定义类 def Dog(): def bite(person): person["total"]-=5 dog = { "name":"alpha", "total":100, "bite":bite } return dog def Person(): def stack(dog): dog["total"]-=5 person = { "name":"safly", "total":100, "stack":stack } return person dog = 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 1 walk self mmmmm walk 美国 人 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.py method1 1 None -------- out method -------- method2 111 -------- method1 333 -------- method1 333 Process finished with exit code 0
面向对象(实例调用)
# #类定义 class Person: #动态属性、函数属性、方法 def walk(self): print(self) print("walk") # 静态属性(数据属性) country = "中国" mWalk = walk p = 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> walk driver Process 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.py 11740496 self <__main__.Person object at 0x00B32550> init saly 11740496 {'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.py 46015088 <__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 safly Process finished with exit code 0
如下也是构造对象的另外方式
#构造对象 class Person: def __init__(self, name): print(self,name) self.name = name return self p = Person.__init__(Person,"ddd") print(p.name)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py <class '__main__.Person'> ddd ddd Process finished with exit code 0
对象属性的增删改查2种方式
通过实例.dict进行增删改查或者实例.属性方法实现
class Person: #动态属性、函数属性、方法 def walk(self): print("walk") # 静态属性(数据属性) country = "中国" def __init__(self,name): #内存地址 self.name = name p = 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.sex print(p.__dict__)
输出如下:
E:\python\python_sdk\python.exe E:/python/py_pro/safly.py saly {'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 # 方法: attack class 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 # 方法:bite class 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.aggressive tiedan = 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.5 Process finished with exit code 0
相关文章推荐
- python基础----迭代器、生成器、协程函数及应用(面向过程实例)
- Python super调用父类的非__init__函数
- python知识点1之引用、拷贝、函数参数传递、实例调用了类变量
- 获得文件属性的函数调用实例
- Python中实例对象如何进行属性和方法调用原因分析
- Python3基础 定义无参数无返回值函数 调用会输出hello world的函数
- Python基础(函数,函数的定义,函数的调用,函数的参数,递归函数)
- python基础1-类属性和实例属性
- 【Python基础】1.3.1 面向过程编程与面向对象编程(类)实例
- 实例讲解Python中函数的调用与定义
- Python基础:19类和实例的内建函数
- Python中函数及默认参数的定义与调用操作实例分析
- 初学Python的学习笔记9----面向对象编程(获取对象信息、实例属性和类属性)、面向对象高级编程(使用__slots__、使用@property)
- Python新手学习基础之函数-return语句与函数调用
- Python基类函数的重载与调用实例分析
- Python 面向对象编程基础(定义类并创建实例、创建实例属性、初始化实例属性、访问限制、类属性、属性名冲突、实例方法、类方法)
- Python基础之函数用法实例详解
- Python基础(5)——函数的执行,调用,嵌套
- python--基础学习(二)判断 、循环、定义函数、继承、调用