[Tutor] best way to dynamically set class variables?

srinivasan srinivasan.rns at gmail.com
Thu Nov 8 05:20:27 EST 2018


Once again thanks a lot guys for all your help and I really appreciate it
that I can really come back to you, if am stuck with any python issues, as
i was really a embedded linux platform developer

>From now I have learnt not to use much bash commands with pipe and to just
use the bash command and parse it using python code

For now I have simplified and it working as below, might be useful for
others sometime


    def get_fstype_of_mounted_partition(self, partition_path):
        """
            Get the filesystem type of the mounted partition.

            :partition_name : Partition path as string (e.g. /dev/mmcblk0p1)
            :return: filesystem type as string
        """

        cmd = "lsblk %s -n -o FSTYPE" % partition_path
        return self._helper.execute_cmd_output_string(cmd)

On Thu, Nov 8, 2018 at 11:11 AM Avi Gross <avigross at verizon.net> wrote:

> I have been reading the replies and wonder sometimes if we understand the
> real question as intended.
>
> Classes in Python can be changed in all kinds of ways even after they have
> been defined and the changes take effect on any new instances created
> afterward. So can instances in multiple ways. If you want to store the
> names
> of a hundred columns in a variable or even a hundred variables, you have
> ways to assign them. You can even change methods on the fly.
>
> If what you want is even more flexibility to design the class later after
> receiving more data such as the names and types of the columns in a data
> table, you can either write the description as text into a temporary file
> and import it, if that makes sense, or make a string to be evaluated in
> memory. Both can be dangerous if you do not trust the parts added as the
> code is going to be run at runtime and can do malicious things.
>
> Python often has so many ways to do things that various ones may work
> better
> for you. In your case, one example would be to intercept the ability to set
> and get (unknown) components of a class or instance by using the right
> dunder function such as __getattr__ and have it KNOW about your dynamic
> variable names and control access to them. There are many ways to do this,
> CAREFULLY, and some work only or differently in new style classes. Heck,
> you
> can put all the important code in an external function called by the above
> that can dynamically be made in Python at a later time. One architecture
> might be to store your new info in one or more dictionaries and have that
> functionality check if a valid request is made and return it. Obviously it
> matters where you want the data held as in per instance or per class or
> superclass and so on.
>
> Of course, I may misunderstand your issue. But from what it sounds like,
> your main request is a way to associate multiple items to be stored after a
> class is created but before it is used. There are an amazing number of ways
> even before you loom at more advanced methods like decorators.
>
> -----Original Message-----
> From: Tutor <tutor-bounces+avigross=verizon.net at python.org> On Behalf Of
> Oscar Benjamin
> Sent: Wednesday, November 7, 2018 5:33 PM
> To: tutor at python.org
> Subject: Re: [Tutor] best way to dynamically set class variables?
>
> On Wed, 7 Nov 2018 at 18:35, Alan Gauld via Tutor <tutor at python.org>
> wrote:
> >
> > On 07/11/2018 14:48, Albert-Jan Roskam wrote:
> >
> > > What is the best way to dynamically set class variables?
> >
> > I think I'm maybe missing the point of your question?
>
> I think you are as well :)
>
> IIUC then the question is: how can I programatically/dynamically create a
> class that has some attributes derived from data that is known at runtime?
>
> Am I understanding this correctly Albert?
>
> > > # -------
> > > class Parent: pass
> > > class_vars = dict(col1='str', col2='int')
> > >
> > > # approach 1
> > > Child = type('Child', (Parent,), class_vars)
>
> This seems fine to me. It may seem cryptic but that's only because it's
> unusual to do this. You are creating a "type" and that is the constructor
> for type objects.
>
> --
> Oscar
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
>


More information about the Tutor mailing list