python类与对象

博客介绍了面向过程和面向对象编程的基本概念,强调面向对象编程(OOP)可利用“类”和“对象”描述真实世界,能提高程序开发效率、便于维护扩展及团队协作。还阐述了面向对象的核心特性,如类、对象、封装、继承、多态,以及类方法与属性等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基本概念
面向过程编程(Procedural Programming):
面向过程编程依赖 - 你猜到了- procedures(过程),一个procedure包含一组要被进行计算的步骤, 面向过程又被称为top-down languages, 就是程序从上到下一步步执行,一步步从上到下,从头到尾的解决问题 。基本设计思路就是程序一开始是要着手解决一个大的问题,然后把一个大问题分解成很多个小问题或子过程,这些子过程再执行的过程再继续分解直到小问题足够简单到可以在一个小步骤范围内解决。
面向对象编程(Object-Oriented Programming):

OOP编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述,使用面向对象编程的原因一方面是因为它可以使程序的维护和扩展变得更简单,并且可以大大提高程序开发效
率 ,另外,基于面向对象的程序可以使它人更加容易理解你的代码逻辑,从而使团队开发变得更从容。

面向对象的几个核心特性
Class 类
一个类即是对一类拥有相同属性的对象的抽象、蓝图、原型。在类中定义了这些对象的都具备的属性(variables(data))、共同的方法 
Object 对象
一个对象即是一个类的实例化后实例,一个类必须经过实例化后方可在程序中调用,一个类可以实例化多个对象,每个对象亦可以有不同的属性,就像人类是指所有人,每个人是指具体的对象,人与人之前有共性,亦有不同
Encapsulation 封装
在类中对数据的赋值、内部调用对外部用户是透明的,这使类变成了一个胶囊或容器,里面包含着类的数据和方法
Inheritance 继承
一个类可以派生出子类,在这个父类里定义的属性、方法自动被子类继承
Polymorphism 多态
多态是面向对象的重要特性,简单点说:“一个接口,多种实现”,指一个基类中派生出了不
同的子类,且每个子类在继承了同样的方法名的同时又对父类的方法做了不同的实现,这就同
一种事物表现出的多种形态。
类方法与属性
属性
#属性方法
class Dog(object):
    name="詹姆斯"
    def __init__(self,name):
        self.name=name
    @property              #将一个方法变成一个属性
    def eat(self):
        print("%s is eating %s" % (self.name,"cabala"))
    @eat.setter
    def eat(self,food):
        print("set to food:",food)

a1=Dog("库里")
a1.eat
a1.eat="6666"

#库里 is eating cabala
#set to food: 6666


#私有属性(方法)
class Park:
    def __init__(self,name,age=20):
        self.name=name
        self.__age=age            #私有的属性

    def __show(self):
        print("age 为 %s" % self. __age)
p=Park("Tom",18)
print(p.name)
# print(p.age)
# p.show()
print(p._Park__age)
p._Park__age=30
p._Park__show()

#Tom
#18
#age 为 30
类方法
#类方法
class Dog(object):
    name="库里"
    def __init__(self,name):
        self.name=name

    @classmethod
      # 类方法,调用的是类变量
    def eat(self):
        print("%s is eating %s" % (self.name,"cabala"))

d1=Dog("詹姆斯")
d1.eat()

#库里 is eating cabala

#类(单继承)
class People(object):                                      #该类继承自object类(object类是所有类的父类)
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def eat(self):
        print("%s is eating" % self.name)

    def talk(self):
        print("%s is talking" % self.name)

    def sleep(self):
        print("%s in the China " % self.name)

class Man(People):
    def __init__(self,name,age,money):
        People.__init__(self,name,age)   #深度优先

        # super(Man,self).__init__(name,age)   #广度优先
        self.money=money

    def sleep(self):
        People.sleep(m1)
        print("*******%s in the china " % self.name)

class Women(People):
    pass

m1=Man("RNG",19,3000)
m1.sleep()

#RNG in the China 
#*******RNG in the china 


#多继承

class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

class Relation(object):
    def __init__(self,n1,n2):
        print("in the relation")

    def make_f(self,obj):
        print("%s with %s" % (self.name,obj.name))

class Man(People,Relation):                                   #继承自People类和Relation类
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def sleep(self):
        print("in the Man_Sleep %s" %self.name)

class Wonman(People,Relation):                           #继承自People类和Relation类
    def __init__(self,name,age):
        self.name=name
        self.age=age
    def sleep(self):
        print("in the Man_Sleep %s" % self.name)

m1=Man("M1",99)
W1=Wonman("W1",22)
m1.make_f(W1)

#M1 with W1
对象
#一种接口,多种实现'
class Animal:
    def __init__(self,name):
        self.name=name

    def talk(self):
        pass

    @staticmethod
    def animal_talk(obj):
        obj.talk()
class Cat(Animal):
    def talk(self):
        print("in the Cat")

class Dog(Animal):
    def talk(self):
        print("in the Dog")

d=Dog("d1")
c=Cat("c1")
Animal.animal_talk(d)
Animal.animal_talk(c)

#in the Dog
#in the Cat

#静态方法
class Dog(object):
    def __init__(self,name):
        self.name=name

    # @staticmethod
    def eat(self,food):
        print("%s is eating %s" % (self.name,food))

d=Dog("d1")
d.eat("xiaohu")

#d1 is eating xiaohu


'''
静态方法,只是名义上归类去管理,
但是实际在类或者实例中访问不了
任何属性。
'''
实例
#学生注册流程

class School(object):
    def __init__(self,name,addr):
        self.name=name
        self.addr=addr
        self.students=[]
        self.emps=[]
    def student(self,stu_obj):
        print("为学员%s办理注册手续" % stu_obj.name)
        self.students.append(stu_obj)

    def teach(self,tea_obj):
        print("雇佣新员工:%s" % tea_obj.name)
        self.emps.append(tea_obj)

class Member(object):
    def __init__(self,name,age,sex):
        self.name=name
        self.age=age
        self.sex=sex

class Teacher(Member):
    def __init__(self,name,age,sex,salary,course):
        super(Teacher, self).__init__(name,age,sex)
        self.salary=salary
        self.course=course

    def tell(self):
        print('''
        ---info of Teacher:%s---
        Name:%s
        Age:%s
        Sex:%s
        Salary:%s
        Course:%s
        ''' % (self.name,self.name,self.age,self.sex,
               self.salary,self.course))
    def teach(self):
        print("%s is teaching course [%s]" % (self.name,self.course))

class Student(Member):
    def __init__(self,name,age,sex,stu_id,grade):
        super(Student, self).__init__(name,age,sex)
        self.stu_id=stu_id
        self.grade=grade

    def tell(self):
        print('''
        ---info of Teacher:%s---
        Name:%s
        Age:%s
        Sex:%s
        Stu_id:%s
        Grade:%s
        ''' % (self.name,self.name,self.age,self.sex,
               self.stu_id,self.grade))
    def pay_money(self,money):
        print("%s has paid money for $ %s" % (self.name,money))

school=School("火星","外太空校区")

t1=Teacher("mmm",29,"M",10000,"IOS")

t2=Teacher("aaa",28,"W",10000,".NET")

s1=Student("bbb",19,"M",1000,"python")

s2=Student("ccc",20,"W",1001,"python+java")

t1.tell()
t2.tell()
school.teach(t1)
school.student(s1)
school.student(s2)
print(school.students)
print(school.emps)

school.emps[0].teach()

for stu in school.students:
    stu.pay_money(5000)

'''
        ---info of Teacher:mmm---
        Name:mmm
        Age:29
        Sex:M
        Salary:10000
        Course:IOS
        

        ---info of Teacher:aaa---
        Name:aaa
        Age:28
        Sex:W
        Salary:10000
        Course:.NET
        
雇佣新员工:mmm
为学员bbb办理注册手续
为学员ccc办理注册手续
[<__main__.Student object at 0x0000022C511D32E8>, <__main__.Student object at 0x0000022C511D3320>]
[<__main__.Teacher object at 0x0000022C511D3278>]
mmm is teaching course [IOS]
bbb has paid money for $ 5000
ccc has paid money for $ 5000
'''
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值