面向对象程序设计
- 类:抽象 (类似于图纸,没有实际数据)
- 对象:具体,即属性和方法的集合 (类似于真正的房子,实际数据)
- 三大特征:封装,继承,多态
- 权限访问
- 私有属性:__variable(以两个下划线代表私有属性)
- 定义:slots=[’__name’,’__flag’]//没有初始化值
- 访问:用一组get,set函数
def setName(self,name): self.__name=name#不要忘记用self.+变量名 def getName(self): return self.__name
- 方法:def 函数名(self):
- 内置方法:(1)__init()->实例化对象时自动调用,里面可以重写
(2)__str():->打印时输出,不重写时打印对象的地址,重写时用return返回
- 内置方法:(1)__init()->实例化对象时自动调用,里面可以重写
- 私有属性:__variable(以两个下划线代表私有属性)
class Turtle:
color="green"
weight=9
def climb(self):
print("爬")
def __str__(self):
return "我是一只小乌龟"
def __init__(self):
print("aaa")
tt = Turtle()
print(tt)
(3)__add():->定义两个类的加
class Point:
__slots__=['x','y']
def __init__(self,x,y):
self.x = x
self.y = y
def __str__(self):
return "该点的坐标为x="+str(self.x)+",y="+str(self.y)+"这个x和y分别代表该点的x坐标值和y坐标值"
def __add__(self,other):
return (self.x+other.x)/2,(self.y+other.y)/2
p1 = Point(3,4)
p2 = Point(5,6)
xx = (p1+p2)[0]
yy = (p1+p2)[1]
print("p1和p2的中位数xx="+str(xx)+",yy="+str(yy))
- 继承
- Class Dad:
- Class Son(Dad):
class Person:
__slots__=['pname','psex','page','pheight']
def __init__(self,name,sex,age,height):
self.pname=name
self.psex=sex
self.page=age
self.pheight=height
def run(self):
print("跑")
def sing(self):
print("唱")
def study(self):
print("学习")
class Student(Person):
def study(self):
print(self.pname+"爱学习")
p = Person('张三', '男', 25, 182)
stu = Student('张三', '男', 26, 182)
stu.study()
- 多态
class Animal:
def talk(self):
print("吼吼")
class Cat(Animal):
def talk(self):
print("喵喵")
class Dog(Animal):
def talk(self):
print("旺旺")
class Pig(Animal):
def talk(self):
print("哼哼")
a = Animal()
a.talk()
c=Cat()
c.talk()
a=c
a.talk()
d = Dog()
d.talk()
a=d
a.talk()
-
三大方法
-
实例方法(self)跟个体自身密切相关
- def setname(self,name):
-
类方法(cls)与个体自身有关,但不依赖于个体
- @classmethod声明这是一个类方法
- def setfee(cls):
- cls.fee+=100
-
静态方法:没有参数,不需要用到实例的属性和方法
- @staticmethod
- def checkname():
- if name.isalpha():
- return True
-
-
怎么来理解这三大方法?
-
就好比,一个人可以跑,可以跳,可以学习,这是他的实例方法,但是他所交的学费,和其他人都一样,和本身没有太大关系,这就是类方法,检查输入一个人的名字是不是字母,也只跟外部输入的变量有关,与自身的属性无关,这就是静态方法。