类和对象
2018-03-19 本文已影响0人
钟速
对象=属性+方法
class Turtle: # 类首字母大写
color = 'green'
weight = 10
def climb(self):
print('正在爬')
self
由同一个类可以生成无数对象,当一个对象的方法被调用是,对象会将自身的引用作为第一个参数传给该方法,Python就知道需要操作哪个对象的方法了。
class Ball:
def setName(self, name):
self.name = name
def showName(self):
print('my name is' + self.name)
a = Ball()
a.setName('football')
a.showName()
构造方法__init__()
只要实例化一个对象,__init__()方法就会在对象被创建时自动调用。
class Ball:
def __init__(self, name):
self.name = name
def showName(self):
print('my name is' + self.name)
a = Ball('football')
a.showName()
公有和私有
class Person:
name = 'Tom' # 定义公有变量
p = Person()
p.name
class Person:
__name = 'Tom' # 定义私有变量
p = Person()
p.__name # 报错,无法调用私有变量
可以从内部调用:
class Person:
def __init__(self, name):
self.__name = name
def getName(self):
return self.__name
p = Person('Tom')
p.getName()
继承
class 类名(被继承的类):
···
class Parent:
def hello(self):
print('正在调用父类')
class Child(Parent):
pass
如果子类中定义与父类同名的方法或属性,则会自动覆盖。
class Child(Parent):
def hello(self):
print('正在调用子类')
当重写子类__init__时,调用父类__init__的方法:
- 调用未绑定的父类方法
class Shark(Fish):
def __init__(self):
Fish.__init__(self)
self.hungry = True
- 使用super函数
class Shark(Fish):
def __init__(self):
super.__init__(self)
self.hungry = True
组合
class Turtle:
def __init__(self, x):
self.num = x
class Fish:
def __init__(self, x):
self.num = x
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print('水池里共有乌龟 %d 只, 鱼 %d 条!' % (self.turtle.num, self.fish.num))
pool = Pool(1, 10)
pool.print_num()