什么是类呢,什么是对象呢?
举个栗子,当我们说一种动物的时候,我们的侧重点是动物,但是实际上动物可以有很多种类,比如说小狗,小猫,大象等等。"动物"这种称呼是他们之间的共性,而小猫小狗的这些呢,就是动物共性中具有个性中的个体。
而在面向对象编程中,类就像动物一样,是一个抽象体,是许多事物的共性集合体,而小猫呢,就是一个实例,称为对象,是共性中实际的具体的个性的对象。
在Python我们可以使用关键词class
来定义一个类,并且可以对其进行各项操作
class Student:# 初始化方法def __init__(self,name,age):self.name = nameself.age = age# 类中的方法,可以获得名称def getName(self):return self.name# 类中方法,可以获取实例化后的年龄def getAge(self):return self.age# 特殊函数,当使用print 对象的时候,返回的字符串,# 必须只使用returndef __str__(self):return "Hello, I am student {}, and my age is {}".format(self.name,self.age)
在类中定义方法就类似与平常定义函数一样,只不过函数中如果需要使用本身的属性或者方法,我们便需要在函数的一个参数使用self
, 并使用self.attribute
调用属性以及方法,如果不需要使用,在后面下节会用提到
1
01
实例化
当我们成功的创建了一个对象之后,我们需要对这个类进行具体的实例化,创建需要的实际对象
Cyberist = Student("Cyberist","20") # 创建一个实际的对象,并且进行初始化,名称对应,类似函数的参数name = Cyberist.getName() # 使用对象中的方法age = Cyberist.getAge()print(name) # Cyberistprint(age) # 20# 当然我们也可以直接调用其属性print(Cyberist.name) # Cyberistprint(Cyberist) # Hello, I am student Cyberist, and my age is 20
1
02
定义私有属性
每个人都有隐私或者不想让别人看到的东西,比如说如果我们不想让其他人知道Student的年龄,那么在Python对象编程中如何设置这些隐私呢?
在Python中我们可以使用双下划线__
来定义一个私有属性和方法
,这样一来别人在外界不能够访问这些属性和方法
class Student:def __init__(self,name):self.__age = 20self.name = namedef __sayHello(self):print(self.name)Cyberist = Student("Cyberist")# print(Cyberist.__age ) # AttributeError: 'Student' object has no attribute '__age'Cyberist.__sayHello() # AttributeError: 'Student' object has no attribute '__sayHello'
但是实际上,在Python中定义的私有属性并不是严格的私有属性和私有方法,只是Python给它们换了一个名称,如果我们要访问其实也是可以访问的,只需要使用object._class_name.__attribute方式就可以了
class Student:def __init__(self,name):self._age = 20self.name = namedef _sayHello(self):print(self.name)Cyberist = Student("Cyberist")print(Cyberist._Student__age) # 20Cyberist._Student__sayHello() # Cyberist
注:其实事实上,我们应该使用单划线_
来表示私有属性和方法,但是这种方法在实际运用的时候我们可以发现在类外面可以轻易的访问,就像访问普通的成员一样,就我个人而言推荐使用双划线__

在面向对象之中还存在着三个十分重要的特性:封装、继承和多态,这些特性我们将在下节中着重讲解
定义一个类可以描述一个人的具体特征,并定义方法可以输出自己的相关信息(可自定义)
Answer
class People:def __init__(self,name, age):self.name = nameself.age = ageself.favorite = Nonedef sayHello(self):print("Hello, my name is {}, and my age is {} ,it is very nice to meet you here")def __str__(self):return "I am {}, aged {}".format(self.name,self.age)def get_favorite(self):self.favorite = input("Input what you like, and I can say it to you ! \n")def say_favorite(self):print("Hi, I know what you like, what you like is: {}, is it? xixi~".format(self.favorite))if __name__ == '__main__':Cyberist = People("Cyberist",20)Cyberist.sayHello()Cyberist.get_favorite()Cyberist.say_favorite()print(Cyberist)
定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。
Answer
from math import sqrtclass Point(object):def __init__(self, x=0, y=0):"""初始化方法"""self.x = xself.y = ydef move_to(self, x, y):"""移动到指定位置:param x: 新的横坐标"param y: 新的纵坐标"""self.x = xself.y = ydef move_by(self, dx, dy):"""移动指定的增量:param dx: 横坐标的增量"param dy: 纵坐标的增量"""self.x += dxself.y += dydef distance_to(self, other):"""计算与另一个点的距离:param other: 另一个点"""dx = self.x - other.xdy = self.y - other.yreturn sqrt(dx ** 2 + dy ** 2)def __str__(self):return '(%s, %s)' % (str(self.x), str(self.y))def main():p1 = Point(3, 5)p2 = Point()print(p1)print(p2)p2.move_by(-1, 2)print(p2)print(p1.distance_to(p2))if __name__ == '__main__':main()

文章转载自Golang学习杂记,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




