python面向对象编程

类的定义,属性,方法…

1.如何定义类 class 类名(): pass
2.类创建对象的过程称为实例化,把抽象的类具体化
对象名 = 类名(参数1、参数2…参数n)

:模板

公有属性:类中的变量,可以在构造函数中传参赋值,也可以实例化对象去赋值
私有属性:不能直接使用,可以通过类里边的方法调用,或赋值给令一个公有属性
类属性:在class关键字下边直接定义,可以被类方法直接调用
公有方法:类中的函数
def __init__(self,…)构造方法
静态方法:只能通过类名进行调用
私有方法:不能调用
类方法:只能通过类名进行调用,可以访问类属性
实例化:通过类创建对象
class =class()

class People():
	def __init__(self,参数1,参数2,参数3...):
		初始化程序(不用调用,实例化之后,自动执行)
		self.name = 参数1		#属性赋值
	def __str__(self):
		#必须返回一个字符串,打印实例化对象输出返回值
	def fun1(self):
	.
	.
	.
#实例化一个对象
p1 = People()
p1.age = 20						#属性赋值
print(id(p1))					#打印p1的id
print(p1.name)					#打印属性
p1.fun1()						#调用方法

类属性,类方法

class Student(object):
    count = 0
    def __init__(self,name):
        self.name = name
        Student.count += 1
    @classmethod
    def Show_Student_count(self):
        print('学生数量为 %d' %(self.count))
student1 = Student('小明')
Student.Show_Student_count()

静态方法:

class Cat(object):
    @staticmethod
    def call():
        print('喵')
Cat.call()
类的封装,继承,多态

封装:封装就是把统一类的东西放在一起,通过self.xxx调用

def __init__(self,name,age):
    #类里的self实质就是对象本身
    #self是对象,name是属性,self.name就是将对象和属性封装在一起
    self.name = name
    self.age = age

继承:继承具有传递性,子类拥有父类的父类的属性和方法
定义一个类,可以从现有的某个类继承
新的类称为子类、扩展类(Subclass),被继承的称为父类、基类、超类
(Baseclass、Superclass)
实例化对象默认执行构造方法,子类没有的方法会调用父类的

如果在子类,父类中存在相同名字的方法,子类只能调用自己的方法,
可以通过super(Son,self).fun()/Father.fun()去调用父类方法

1. father类拥有Grandfather的属性和方法,son类拥有 Father,Grandfather的属性和方法

class Grandfather():
	def __init__(story):
		self.story = story
	def fun1():
		print(self.story)
class Father(Grandfather):
	def __init__(self,name,age):
		self.name = name
		self.age = age 
	def fun1(self):
		print(self.name)
		print(self.age)
class Son(Father):
	def __init__(self,sex)
		self.sex = sex
	def fun1(self):
		print(self.sex)

2.C有A和B的全部属性和方法,但当A和B中有相同的方法时,谁在前就用谁的方法

class A():
    def test(self):
        print('A --- test 方法')
    def demo1(self):
        print('A --- demo1方法')

class B():
    def test(self):
        print('B --- test 方法')
    def demo(self):
        print('B --- demo方法')

class C(B,A):
    pass

多态:
对扩展开放:允许子类重写方法
对修改封闭:不修改,直接继承父类方法

class Person(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender
    def whoAmI(self):
        return 'I am a Person, my name is %s' % self.name

class Student(Person):
    def __init__(self, name, gender, score):
        super(Student, self).__init__(name, gender)
        self.score = score
    def whoAmI(self):
        return 'I am a Student, my name is %s' % self.name

class Teacher(Person):
    def __init__(self, name, gender, course):
        super(Teacher, self).__init__(name, gender)
        self.course = course
    def whoAmI(self):
        return 'I am a Teacher, my name is %s' % self.name

在一个函数中,如果我们接收一个变量 x,则无论该 x 是 Person、Student还是 Teacher,
都可以正确打印出结果:

def who_am_i(x):
    print x.whoAmI()

p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English')

who_am_i(p)
who_am_i(s)
who_am_i(t)

运行结果:

I am a Person, my name is Tim
I am a Student, my name is Bob
I am a Teacher, my name is Alic
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值