类
面向对象编程是最有效的软件编写方法之一,而类具备这种灵活性.
面向过程编程,看重的是解决问题的过程。
面向过程: 编程主要用到的是“函数”知识,将每个过程步骤打包成函数,再依次调用
创建类
类名一般首字母要大写
// A code block
# 语法:创建一个名为“ClassName”的类,类名一般首字母要大写,(): 不能丢
class ClassName():
# 如定义一个名为'狗'的类,可以写成class Dog():
# 规范:class语句后续的代码块要缩进
def function1():
# 定义类中的函数1
var foo = 'bar';
既然【类】是一个函数包,所以一个类中可以放置一堆函数
// A code block
class Lucky():
def tuple0(self): #self用于关联类与函数间的联系,self的取值不是唯一的,你也可以取name这种,但是在python界几乎默认self,所以为了规范化还是用self
print('时光易逝,年华不再')
def set0(self):
print('越努力越幸运')
def kay0(self):
print('越难的事,越有意义')
def conten(self):
print('时光易逝,只争朝夕')
k=Lucky() #启动类需要实例化,这就是也self关联到的,有self才能实例化
k.tuple0()
k.set0()
k.kay0()
k.conten()
var foo = 'bar';
// An highlighted block
时光易逝,年华不再
越努力越幸运
越难的事,越有意义
时光易逝,只争朝夕
var foo = 'bar';
继承:子类自动共享父类之间数据和方法的机制
// A code block
class MyList(list):
pass #表示什么也不干
lst = MyList([1,5,2,7,8])
lst.append(9)
lst.sort() #sort()函数表示对列表进行排列
print(lst)
var foo = 'bar';
// An highlighted block
[1, 2, 5, 7, 8, 9]
var foo = 'bar';
多态:不同对象对同一方法响应不同的行动
// A code block
class Animal:
def run(self): #同过run的实例化控制下面的子类
raise AttributeError('子类必须实现这个方法')
class People(Animal):
def run(self):
print('人正在走')
class Pig(Animal):
def run(self):
print('pig is walking')
class Dog(Animal):
def run(self):
print('dog is running')
def func(animal):
animal.run()
func(Pig())
# pig is walking
var foo = 'bar';
// An highlighted block
pig is walking
var foo = 'bar';
类的方法与普通的函数只有一个特别的区别 —— 它们必须有一个额外的第一个参数名称(对应于该实例,即该对象本身),按照惯例它的名称是 self。在调用方法时,我们无需明确提供与参数 self 相对应的参数
// A code block
class Ball:
def setName(self, name):
self.name = name
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
a = Ball()
a.setName("球A")
b=Ball()
name=input('可用input函数设置手动输入:')
b.setName(name)
a.kick()
b.kick()
var foo = 'bar';
// An highlighted block
我叫球A,该死的,谁踢我...
我叫李海,该死的,谁踢我...
var foo = 'bar';
Python 的魔法方法
据说,Python 的对象天生拥有一些神奇的方法,它们是面向对象的 Python 的一切…
它们是可以给你的类增加魔力的特殊方法…
如果你的对象实现了这些方法中的某一个,那么这个方法就会在特殊的情况下被 Python 所调用,而这一切都是自动发生的…
类有一个名为__init__(self[, param1, param2…])的魔法方法,该方法在类实例化时会自动调用。
// A code block
class Ball:
def __init__(self, name):
self.name = name
def kick(self):
print("我叫%s,该死的,谁踢我..." % self.name)
def lucky(self):
print("我叫%s,该死的,谁踢我..." % self.name) #可设置多个,灵活应用
a = Ball("球A")
b = Ball("球B")
a.kick()
# 我叫球A,该死的,谁踢我...
b.lucky()
# 我叫球B,该死的,谁踢我...
var foo = 'bar';
// An highlighted block
我叫球A,该死的,谁踢我...
我叫球B,该死的,谁踢我...
var foo = 'bar';
继承
编写类时,不一定需要从新开始写。如果你要编写两个类时,数据之间可以互相用,可以使用继承。一个类继承另一个类时,他将自动获得另一个类的属性和方法,原有的称为父类,新的称为子类。子类继承父类的所有属性和方法,同时还可以定义自己的属性和方法.
// A code block
class 基础机器人():
def __init__(self,参数):
self.姓名 = 参数
def 自报姓名(self):
print('我是' + self.姓名 + '!')
def 卖萌(self):
print('主人,求抱抱!')
class 高级机器人(基础机器人):
def 自报姓名(self):
print('我是高级机器人' + self.姓名 + '!')
def 卖萌(self):
print('主人,每次想到怎么欺负你的时候,就感觉自己全身biubiubiu散发着智慧的光芒!')
#1
安迪=基础机器人('安迪')
安迪.自报姓名()
安迪.卖萌()
#2
安迪 = 高级机器人('安迪') #同一数据的不同应用
安迪.自报姓名()
安迪.卖萌()
var foo = 'bar';
// An highlighted block
#1
我是安迪!
主人,求抱抱!
#2
我是高级机器人安迪!
主人,每次想到怎么欺负你的时候,就感觉自己全身biubiubiu散发着智慧的光芒!
var foo = 'bar';