>  기사  >  백엔드 개발  >  Python의 객체 지향 프로그래밍에 대한 간략한 설명(코드 예제)

Python의 객체 지향 프로그래밍에 대한 간략한 설명(코드 예제)

青灯夜游
青灯夜游앞으로
2018-10-29 17:36:312823검색

이 기사에서는 Python의 객체 지향 프로그래밍(코드 예제)에 대해 간략하게 설명합니다. 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 첫 번째 경우---클래스 생성

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''
class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")
    def eat(self):
        print('吃')

#🎜 🎜 #2. 클래스를 사용하여 객체 인스턴스화
#__author:"吉"
#date: 2018/10/27 0027
#function:


# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''


class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name


# 实例化对象
'''
格式:对象名= 类名(参数列表信息)
'''
peoson1 = Peoson()
print(peoson1.name,peoson1.age,peoson1.weight)
print(peoson1.eat())
print(peoson1.run())

# 原理
'''
变量是在栈区,对象是在堆区。

'''

3 객체의 속성 및 메서드에 액세스합니다
#__author:"吉"
#date: 2018/10/27 0027
#function:

# 设计类:
'''
类名:首字母大写,见名思意
属性:驼峰原则
行为:见名思意,驼峰法
说明:类不占空间,实例化对象占用空间!
'''

# 格式,object是父类,超类
'''
类名(object):
    属性
    行为
'''


class Peoson(object):
    name = 'zhanglei'
    age = 24
    weight = 70

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name


# 实例化对象
'''
格式:对象名= 类名(参数列表信息)
'''
peoson1 = Peoson()

# 访问属性
'''
变量是在栈区,对象是在堆区。

'''
print(peoson1.name,peoson1.age,peoson1.weight)
peoson1.name = 'jiji'
peoson1.age = 33
peoson1.weight = 90

print(peoson1.name,peoson1.age,peoson1.weight)

peoson1.changeName('lala')

print(peoson1.name,peoson1.age,peoson1.weight)

4. 생성자
#__author:"吉勇佳"
#date: 2018/10/27 0027
#function:

'''
构造函数:__init__() 是在创建类的时候自动调用,不写出这个
        构造函数的话,默认是一个空的构造函数什么页不执行。

'''

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

# 实例化对象
p1 = Peoson("jiyongjia",24,177,78)

print(p1.name,p1.age,p1.height,p1.weight)
p1.changeName('zhanglei')
print(p1.name,p1.age,p1.height,p1.weight)

# self 原理
'''
1、哪个对象调用,self就代表那个对象。 
'''

__class__()를 사용하여 인스턴스와 소멸자를 생성합니다

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    # 这里是析构函数
    def __del__(self):
        print("我是析构函数")


    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89)
        print(p.name,p.age,p.weight,p.height)


# 即 执行p1的一个方法即可创建新的对象。
p1 = Peoson("丽丽",33,53,222)
print(p1.name,p1.age,p1.height,p1.weight)
p1.createObj("狗熊")

'''
输出:丽丽 33 53 222
狗熊 24 89 56
我是析构函数
我是析构函数
'''
print(p1.name)

6 __str__()과 __repr__()#🎜🎜 ## 🎜🎜#

'''
重写
__str__()
    str方法是给用户用的,用于返回用户需要的结果信息、
__repr__()
   如果换成__repr__()是得到与str相同的结果。是在黑屏终端直接敲对象名再回车的方法
    注意:在没有str方法但是有repr的时候,repr 就相当于str,只是repr用于黑屏终端
'''

class Peoson(object):
    def __init__(self,name,age,height,weight):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
    # 这里是析构函数
    def __del__(self):
        print("我是析构函数")


    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89)
        print(p.name,p.age,p.weight,p.height)

    # 如果换成__repr__()是得到相同的结果。是在黑屏终端直接敲对象名再回车的方法
    def __str__(self):
        pass
        # return "这里是str"
        # return self.name
        #返回多个值的话用如下
        return "%s-%d-%d" % (self.name,self.age,self.weight)



# 如果要打印出所有的属性信息呢?
p1 = Peoson("嘉嘉",44,222,336)

# 不写def __str__()方法的时候,打印出的是该对象的地址信息
print(p1)
'''
输出:9518e65a3214f7b54c5c5a9abe23737f
'''

# 写了__str__()函数是 打印出的自己需要返回的信息数据,此时p1等价于p1.__str__()
print(p1)

7. 연습 - 객체 지향 숙제:

# 🎜🎜#총기 설계 총알 디자인은 총알이 한 발씩 적습니다. 총알이 없으면 사격할 수 없다는 메시지가 표시됩니다.

#__author:"吉"
#date: 2018/10/27 0027
#function:

# 枪设计子弹 设计一次少一个子弹,没子弹了提示无法射击

class Gun(object):
    def __init__(self,name,bulletNum):
        self.name = name
        self.bulletNum = bulletNum

    def shot(self):
        self.bulletNum =self.bulletNum - 1
        if self.bulletNum+1 != 0:
            print("此枪型号是:%s,此次射击成功!子弹减少1发,余量为:%d" %(self.name,self.bulletNum))
        else:
            print("*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************")
            self.bulletNum = 5

gun = Gun("AK47",5)
# 射击敌人
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()
gun.shot()

'''
输出:
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:3
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:2
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:1
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:0
*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:3
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:2
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:1
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:0
*************射击失败,子弹数为0.已经为您子弹加弹5发!请重新射击!**************
此枪型号是:AK47,此次射击成功!子弹减少1发,余量为:4

'''
#🎜🎜 # 8. 비공개 속성을 생성하는 방법, 외부에서 액세스하거나 수정할 수 없습니다.

#1 외부에서 변경할 수 없는 비공개 속성을 지정합니다. __money #2 Python에서는 앞에 밑줄이 두 개 있는 속성만 비공개 속성이라고 부르지만, __money__는 특별한 속성이라고 부르지 않습니다. #3 _money는 비공개 속성이 아니지만 이러한 변수를 볼 때 관례에 따라 비공개로 처리해야 합니다. 본질적으로 비공개가 아니며 접근이 가능합니다.

# 指定私有属性,在外部无法更改:即在属性前加两个下划线 如__money

class Person(object):
    def __init__(self,name,age,height,weight,money):
        self.name = name
        self.age = age
        self.height = height
        self.weight = weight
        self.__money= money

    def run(self):
        print("跑!")

    def eat(self):
        print('吃')

    def changeName(self,name):
        self.name = name

    # 创建对象函数  self.__class__ 是代表类名的
    def createObj(self,name):
        p=self.__class__(name,24,56,89,10000)
        print(p.name,p.age,p.weight,p.height,p.__money)


# 即 执行p1的一个方法即可创建新的对象。
p1 = Person("丽丽",33,53,222,20000)

print(p1.name,p1.__money)    #此处出错,在外部无法访问私有
외부에서 접근하고 싶다면 메소드에 프라이빗 속성을 넣고 메소드를 호출하면 프라이빗 속성에 접근할 수 있습니다. 예:

def run(self):
print("跑!")
print("工资",self.__money)

Summary: 비공개 속성에 액세스하거나 수정할 때 두 가지 고정 메서드를 통해 속성을 수정하고 액세스하는 동시에 해당 메서드에서 데이터를 필터링할 수 있습니다.

# 对于处理私有属性的方法---设置值的方法
    def SetMoney(self,money):
        if money<0:
            print("输入的钱不能小于0")
        else:
            self.__money = money

    # 对于访问私有属性的方法
    def GetMoney(self):
        return self.__money
# 실제로 __money에 액세스할 수 없는 이유는 Python이 개인 속성을 _Person__money로 변경했기 때문입니다.

# 이는 여전히 액세스 가능하다는 의미입니다. 하지만 규칙을 따라야 하며 이와 같이 액세스해서는 안 됩니다.

p1._Person__money = 70    
print(p1.GetMoney())

위에서 언급한 것처럼 비공개 속성을 수정할 수 있습니다.

父类的文件信息:
class People(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age


子类中调用上边的父类
from people import People

class Student(People):
    def __init__(self,name,age,faceValue):
        # 继承父类的__init__()
        super(Student,self).__init__(name,age)
        self.faceValue = faceValue
stu = Student("玲",22,100)
print(stu.name,stu.age,stu.faceValue)

输出
   玲 22 100


# 总结:
# 我们发现Student类中并无这两个属性信息,这两个属性是调用的父类的__init__中的属性。
# 总结: # 我们发现Student类中并无这两个属性信息,这两个属性是调用的父类的__init__中的属性。

위 내용은 Python의 객체 지향 프로그래밍에 대한 간략한 설명(코드 예제)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제