对象
1.创建类对象
对象 = 属性+方法(方法其实就是函数)
类可以看做是用于建造房子的图纸,经过类实例化后的对象才是可以住人地房子。self参数就相当于每个房子的门牌号
class Turtle: ##python中约定类名以大写字母开头
""""关于类的一个简单例子"""
# 属性
color = 'green'
weight = 10
legs = 4
shell =True
mouth = '大嘴'
# 方法(函数)
def climb(self):
print('我正在努力的爬...')
def sleep(self):
print('睡了睡了zzz')
由类生成对象,又叫类对象
Turtle() ##直接创建实例对象
tt = Turtle() ## 将类对象赋值给tt。
调用对象方法(函数)
tt.climb()
我正在努力的爬...
2. oo的特征
oo=objected oriented(面向对象)
python就是一个面向对象的编程
- 封装
- 继承
继承就是子类自动继承父类的数据与方法的机制
class Mylist(list): ##创建一个Mylist()类
pass ##占位符
list2 = Mylist() ##将类赋值给实例对象
list2.append(4) ##这里可以看到list2()继承了list()的方法,可以用list.append()添加数据
print(list2)
4
- 多态
多态就是不同对象对同一方法响应不同的行动
class A:
def fun(self):
print('我是小A...')
class B:
def fun(self):
print('我是小B...')
a = A()
b = B()
a.fun()
b.fun() ##a与b两个不同的对象都是调用了相同的fun()方法(函数)实现不一样的结果。
我是小A...
我是小B...
3. self是什么?
class Ball:
def setName(self, name):
self.name = name
def klick(self):
print('我是%s,该死的...'% self.name)
a = Ball()
a.setName('大球') ##a的门牌号
b = Ball()
b.setName('二球')
c = Ball()
c.setName('三球')
a.klick()
b.klick()
c.klick()
- init()方法
init(self, param1, param2...)
在实例化对象的时候可以传人参数,这些参数会自动传人到init方法中,我们可以通过重写这个方法来自定义对象的初始化操作。
class Ball:
def __init__(self, name): ##重写__init__方法,如果不重写的话默认就是def __init__(self):
self.name = name
def klick(self):
print('我是%s,该死的...'% self.name)
a = Ball('大球')
a.klick()
4.继承
class Parent(): ##定义一个父类
def hello(self):
print('正在调用父类....')
class Child(Parent): ##定义一个子类,括号内为继承的父类名字
pass
P = Parent()
P.hello()
正在调用父类....
C = Child()
C.hello()
正在调用父类.... ## 可以看到子类继承了父类的方法(函数)
如果子类中定义域父类相同的方法与属性,则会覆盖父类的方法与属性。
class Parent(): ##定义一个父类
def hello(self):
print('正在调用父类....')
class Child(Parent):
def hello(self):
print('正在调用子类....')
P = Parent()
P.hello()
正在调用父类....
C = Child()
C.hello()
正在调用子类.... ## 可以看到子类方法覆盖了父类的方法(函数)
- super函数
import random as r
class Fish:
def __init__(self):
self.x = r.randint(1,10)
self.y = r.randint(1,10)
def move(self):
self.x -= 1
print("我的位置是",self.x, self.y)
class Goldfish(Fish):
pass
class salmon(Fish):
pass
class Shark(Fish):
def __init__(self):
self.hungry = True
def eat(self): ##在重写方法的时候覆盖了父类的方法,会导致报错。
if self.hungry:
print('吃货的梦想就是天天有得吃')
self.hungry = False
else:
print("吃不下了...")
shark = Shark()
shark.eat()
shark.eat()
shark.move()
##
吃货的梦想就是天天有得吃
吃不下了... ##可以正确调用子类的eat()方法
Traceback (most recent call last):
File "C:/shiyan/honghua/test.py", line 25, in <module>
shark.move()
AttributeError: 'Shark' object has no attribute 'move' ##无法调用父类的move()方法。
##### 解决用super函数
super.__init__() ##super.加需要的父类
import random as r
class Fish:
def __init__(self):
self.x = r.randint(0,10)
self.y = r.randint(0,10)
def move(self):
self.x -= 1
print("我的位置是",self.x, self.y)
class Goldfish(Fish):
pass
class salmon(Fish):
pass
class Shark(Fish):
def __init__(self):
super().__init__() ##super.需要的父类方法
self.hungry = True
def eat(self):
if self.hungry:
print('吃货的梦想就是天天有得吃')
self.hungry = False
else:
print("吃不下了...")
goldfish = Goldfish()
goldfish.move()
shark = Shark()
shark.move()
python支持一次继承多个父类方法
class DeriverBaseName(Base1, Base2, Base3...):
5.多重继承
class Base1:
def foo1(self):
print('正在调用Base1')
class Base2:
def foo2(self):
print('正在调用Base2')
class C(Base1,Base2):
pass
c = C()
c.foo1()
c.foo2()
网友评论