python: objct property

 

"""
clerker.py
类
edit:geovindu,Geovin Du
date:20230672
IDE:PyCharm 2023.1.2
clerker.__dict__ 窥探私有属性
私用属性
clerker._Clerker.__age=-1
clerker.__age=-1
"""
import sys
import os

class Clerker(object):
    """
    类的封装
    """
    salary=30  #定义类的公有属性
    _salary2=20 #定义类的保护属性
    __salary3=50 #定义类的私有属性

    def __init__(self,name:str,age:int):
        """

        :param name:
        :param age:
        """
        self._name=name #公有属性
        self.__age=age #私用属性,需要通过(函数)setter,getter 设置和访问


    @property  # @property装饰getter方法  get ,set 名字相符
    def Age(self):
        """

        :return:
        """
        return self.__age

    @Age.setter
    def Age(self,age):  #@方法名.setter 设置
        """

        :param age:
        :return:
        """
        if age>0:
            self.__age=age

    def __getage(self):
        """

        :return:
        """
        print(f"我是{self._name},今年{self.__age}岁")
        return self.__age


    def setName(self,name):
        """

        :param name:
        :return:
        """
        self._name=name

    def getName(self):
        """

        :return:
        """
        return self._name

    def setAge(self,age):
        """

        :param age:
        :return:
        """
        if(age>0):
            self.__age=age

    def getAge(self):
        """

        :return:
        """
        return self.__age

  

调用:

#私有属性也可以处理
cl=Clerker.Clerker("geovindu",25)
print(cl.getAge())
print(cl.__dict__)  #查看属性
print(Clerker.__dict__) #查看方法
cl._Clerker__age=20
print(cl.Age)
print(cl._Clerker__getage())
print(Clerker.Clerker.salary)
print(Clerker.Clerker._salary2)

  

继承

 

"""
Animal.py
类
edit:geovindu,Geovin Du
date:20230702
IDE:PyCharm 2023.1.2
"""
import sys
import os

class Animal(object):
    """
    """
    def __init__(self):
        """

        """
        self._Category=""
        self._Color=""

    @property
    def Categor(self):
        """

        :return:
        """
        return self._Category

    @Categor.setter
    def Categor(self,categor):
        """

        """
        self._Category=categor

    @property
    def Color(self):
        """

        :return:
        """
        return self._Color

    @Color.setter
    def Color(self,color):
        """

        :param color:
        :return:
        """

        self._Color=color;

    def Eat(self):
        """

        :return:
        """
        print(f"{self._Color}的{self._Category}在吃食物")

    def Sleeep(self):
        """

        :return:
        """
        print(f"{self._Color}的{self._Category}在睡觉")


"""
Dog.py
继承类 extens
edit:geovindu,Geovin Du
date:20230702
IDE:PyCharm 2023.1.2
"""
import sys
import os

import Animal

class Dog(Animal.Animal):
    """

    """

    def wathchDoor(self):
        """

        :return:
        """
        print(f"{self.Color}的{self.Categor}在看家门")


"""
Cat.py
继承类 inherited  Animal
python (类名) super
java 继承可以使用 extends 和 implements 这两个关键字来实现继承
C++ :public 类名
C# :类名
可以重写父类方法
edit:geovindu,Geovin Du
date:20230702
IDE:PyCharm 2023.1.2
"""
import sys
import os

import Animal

class Cat(Animal.Animal):
    """

    """
    def __init__(self):
        self._eye=""  # 自有属性
        super().__init__()


    @property
    def Eye(self):
        """

        :return:
        """
        return self._eye

    @Eye.setter
    def Eye(self,eye):
        """

        :param eye:
        :return:
        """
        self._eye=eye


    def Eat(self):
        """
        重写父类的方法,用子类的方法
        :return:
        """
        print(f"{self.Color}的{self.Categor}在吃鱼")
        super().Eat() #再调用父类的方法

    def CatchaMouse(self):
        """

        :return:
        """
        print(f"{self.Color}的{self.Categor}显矅{self._eye}注视着在老鼠")

  

 调用:

dog=Dog.Dog()
dog.Color="黄色"
dog.Categor="狼狗"
dog.Eat()
dog.Sleeep()
dog.wathchDoor()
cat=Cat.Cat()
cat.Categor="白色"
cat.Color="家猫"
cat.Eye="黄眼睛"
cat.Eat()
cat.Sleeep()
cat.CatchaMouse()

  

输出:

黄色的狼狗在吃食物
黄色的狼狗在睡觉
黄色的狼狗在看家门
家猫的白色在吃鱼
家猫的白色在吃食物
家猫的白色在睡觉
家猫的白色显矅黄眼睛注视着在老鼠

  

"""
Singleton.py
单例 模式
python (类名) super
java 继承可以使用 extends 和 implements 这两个关键字来实现继承
C++ :public 类名
C# :类名
可以重写父类方法
edit:geovindu,Geovin Du
date:20230702
IDE:PyCharm 2023.1.2
"""

import sys
import os

class Singleton(object):
    """
    单例  __new__ 只让它创建一次
    """
    __instance=None  #类属性

    def __init__(self):
        super().__init__()
        self.name=""

    def __new__(cls, *args, **kwargs):
        if not cls.__instance:
            cls.__instance=super().__new__(cls,*args, **kwargs)
        #print(f"22222")
        return cls.__instance
        #return super().__new__(cls,*args, **kwargs)

  

调用:

sin=Singleton.Singleton()
sin.name="geovindu"
print(id(sin))
sin.name="涂聚文"
print(id(sin))

  

 

# encoding: utf-8
# Author    : geovindu,Geovin Du 涂聚文.
# IDE       : PyCharm 2023.1 python 11
# Datetime  : 2023/7/2 19:35
# User      : geovindu
# Product   : PyCharm
# Project   : pythonStudyDemo
# File      : duShapes.py
# explain   : 学习  radial (公有属性)  _radial (保护属性)  __radial (私有属性) 下划线的条数确定私有公有性不同

import sys
import os
import math

class DuShapes(object):
    """

    """
    price = 10 #定义类的公有属性
    _price = 100 #定义类的保护属性
    __pirce = 1000 #定义类的私有属性

    def __init__(self):
        """

        """
        self.radial = 0  #公有属性
        self._radial=0   #保护属性
        self.__radial=0  #私有属性

    @property
    def Radial(self):
        return self.radial

    @Radial.setter
    def Radial(self, radial):
        if (radial > 0):
            self.radial = radial
        else:
            print(f"None")

    def setRadial(self, radial):
        if (radial > 0):
            self.radial = radial
        else:
            print(f"None")

    def getRadial(self):
        return self.radial

    def calculateArea(self):
        are = math.pi * self.radial ** 2
        return are

  

posted @ 2023-07-02 10:27  ®Geovin Du Dream Park™  阅读(19)  评论(0)    收藏  举报